知晓自己在哪个Activity以及随时随地退出程序。

知晓自己在哪个Activity的方法:

在你进入一家公司之后,更有可能的是接手一份别人写的代码,因为你刚进公司就正好有一个新项目启动的概率并不高。阅读别人的代码时有一个很头疼的问题,就是当你需要在某个界面上修改一些非常简单的东西时,却半天找不到这个界面对应的Activity是哪一个。

解决办法为:创建一个BaseActivity类,让他继承AppCompatActivity类,然后让其它的Activity继承

BaseActivity类,代码如下:

class BaseActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        Log.d("BaseActivity", javaClass.simpleName)
    }
}

Kotlin中的javaClass表示:获取当前实例的Class对象,相当于在Java中调用getClass()方法;

Kotlin中的BaseActivity::class.java表示获取BaseActivity类的Class对象,相当于在Java中调用BaseActivity.class。

在上述代码中,我们先是获取了当前实例的Class对象,然后再调用simpleName获取当前实例的类名。

这样在打开一个新的Activity会自动打印日志,获取当前实例的Class对象,再通过simpleName获取当前实例的类型!!!

随时随地退出程序实现方法:

当我们在ThirdActivity时,想退出程序,需要三次back操作,影响用户体验,Home键是把程序挂起,并不是退出,当我们需要随时能退出程序时,需要一个方案。

方案很简单,只需要使用一个集合对所有的Activity进行管理即可,当要退出时,直接遍历集合,关掉所有的Activity即可。

如果所有的Activity只需要一个集合,可以创建一个单例类来保存所有的Activity,单例类如下:

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()
    }
}

添加了addActivity()  removeActivity()  以及 finishAll() 函数,可以在创建、删除Activity时,向集合内添加元素,调用finishAll()直接通过遍历集合关闭所有Activity。这里进行了一个if判断,主要是用来判断当前Activity是否正在被销毁,因为有的Activity可能处于停止状态,自动被销毁!如果没有被销毁,则进行销毁。

修改BaseActivity代码如下:

open class BaseActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("BaseActivity", javaClass.simpleName)
        ActivityCollector.addActivity(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        ActivityCollector.removeActivity(this)
    }
}

重写了onCreate函数,当每一次调用onCreate时,会调用ActivityCollector 中的 addActivity函数,将类添加进集合。

并重写了onDestroy函数,因为Activity处于不可见状态,即停止状态时,如果内存不足,会自动被回收,如果自动被回收,则直接调用ActivityCollector中的removeActivity,自动释放Activity。

此时,如果我们想在任何Activity中直接退出程序,可以直接调用ActivityCollector的finishAll函数,自动释放所有Activity,从而关闭程序,我们此时在ThirdActivity中的按钮上实现这个功能。

代码如下:

class ThirdActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.third_layout)
        val btn3: Button = findViewById(R.id.button3)
        btn3.setOnClickListener {
            ActivityCollector.finishAll()
        }
    }
}

此时,点击按钮,即可退出程序。

退出程序后,该程序仍然会在后台有一个进程,可以在关闭Activity后,添加如下代码,直接一并杀死进程:

android.os.Process.killProcess(android.os.Process.myPid())

killProcess()方法用于杀掉一个进程,它接收一个进程id参数,我们可以通过myPid()方法来获得当前程序的进程id。需要注意的是,killProcess()方法只能用于杀掉当前程序的进程,不能用于杀掉其他程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值