根据当前界面判断是哪一个Activity
比如说我们有两个界面:FirstActivity
和SecondActivity
默认情况下这两个类继承于AppCompatActivity
父类
要想实现这个功能,我们只需要再创建一个普通的类BaseActivity
用来打印当前实例的类名
然后实现下图的继承关系:

具体实现:
重写BaseActivity
的onCreate()
方法:
1 2 3 4 5 6 7 8
| open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Log.d("BaseActivity",javaClass.simpleName) } }
|
javaClass
表示获取当前实例的Class
对象,javaClass.simpleName
表示获取当前实例的类名
然后让BaseActivity
成为FirstActivity
和SecondActivity
的父类
1 2 3
| class FirstActivity : BaseActivity() { }
|
1 2 3
| class SecondActivity : BaseActivity() { }
|
由于在调用子类时,也会调用父类的onCreate()
方法,所以BaseActivity
才可以打印其子类的类名
随时随地退出程序
想实现这个功能,只需要用一个专门的集合对所有的Activity
进行管理。
创建一个单例类ActivityCollector
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| object ActivityCollector { private val activities = ArrayList<Activity>() fun addActivity(activity:Activity){ activities.add(activity) } fun removeActivity(activity: Activity){ activities.remove(activity) } fun finishAll(){ for(activity in activities){ if(!activity.isFinishing){ activity.finish() } } activities.clear() } }
|
只需在其他Activity
中调用这个单例类即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.first_layout) ActivityCollector.addActivity(this) }
override fun onDestroy() { super.onDestroy() ActivityCollector.removeActivity(this) }
button.setOnClickListener{ ActivityCollector.finishAll() } }
|
启动Activity的最佳方式
如果在项目交接时,别人不知道启动SecondActivity
需要传递哪些数据,就需要做如下改动
修改SecondActivity
中的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class SecondActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.secomd_layout) } companion object{ fun actionStart(context: Context, data1:String,data2:String){ val intent = Intent(context,SecondActivity::class.java) intent.putExtra("param1",data1) intent.putExtra("param2",data2) context.startActivities(intent) } } }
|
这样的话就可以简化启动SecondActivity
的代码,还可以解决上面的问题:
1 2 3
| button.setOnClickListener{ SecondActivity.actionStart(this,"data1","data2") }
|