根據當前界面判斷是哪一個Activity
比如說我們有兩個界面:FirstActivity
和SecondActivity
默認情況下這兩個類繼承於AppCompatActivity
父類
要想實現這個功能,我們只需要再創建一個普通的類BaseActivity
用來打印當前實例的類名
然後實現下圖的繼承關係:
具體實現:
重寫BaseActivity
的onCreate()
方法:
//爲了使BaseActivity可以被繼承,需要在類名前加上open關鍵字
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//打印當前Activity的類名
Log.d("BaseActivity",javaClass.simpleName)
}
}
javaClass
表示獲取當前實例的Class
對象,javaClass.simpleName
表示獲取當前實例的類名
然後讓BaseActivity
成爲FirstActivity
和SecondActivity
的父類
class FirstActivity : BaseActivity() {
//.............
}
class SecondActivity : BaseActivity() {
//.............
}
由於在調用子類時,也會調用父類的onCreate()
方法,所以BaseActivity
纔可以打印其子類的類名
隨時隨地退出程序
想實現這個功能,只需要用一個專門的集合對所有的Activity
進行管理。
創建一個單例類ActivityCollector
:
object ActivityCollector {
//創建一個用來暫存Activity的集合
private val activities = ArrayList<Activity>()
//將Activity實例添加到集合中
fun addActivity(activity:Activity){
activities.add(activity)
}
//將Activity從集合中移除
fun removeActivity(activity: Activity){
activities.remove(activity)
}
//終止程序
fun finishAll(){
for(activity in activities){
//檢查是否正在被銷燬中
if(!activity.isFinishing){
activity.finish()
}
}
activities.clear()
}
}
只需在其他Activity
中調用這個單例類即可
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
中的代碼:
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
的代碼,還可以解決上面的問題:
button.setOnClickListener{
SecondActivity.actionStart(this,"data1","data2")
}