知晓自己在哪个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()方法只能用于杀掉当前程序的进程,不能用于杀掉其他程序。

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

  1. Android初学习之四:知晓当前是哪一个活动和随时随地退出程序

    一.知晓当前是哪一个活动 1.首先新建两个活动FirstActivity和ScondActivity 2.接着在新建一个java class为BaseActivity 3.最后让刚刚两个活动继承Bas ...

  2. lstm 文本分类_带有lstm和单词嵌入的灾难推文上的文本分类

    lstm 文本分类 This was my first Kaggle notebook and I thought why not write it on Medium too? Ť他是我第一次Kag ...

  3. 使用seq2seq模型进行机器翻译的方法不同

    自然语言处理| 深度学习 (Natural language processing | Deep learning) Machine translation is a computational li ...

  4. 四大组件之Activity

    1.活动是什么 活动是直接跟用户进行交互的一个组件,平常我们直接用的界面就是activity. 2.活动的基本用法 1)创建布局 2)创建activity继承AppCompatActivity,并且重 ...

  5. Android中的Activity

    说明: 本文是郭霖<第一行代码-第3版>的读书笔记 Activity是包含用户界面的组件,主要用于和用户交互,一个应用程序中可以包含一个或多个Activity 3.2 基本用法 创建一个E ...

  6. Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数

    探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...

  7. 【达内课程】Activity 详解

    文章目录 Activity介绍 生命周期 Activity的启动模式 Activity的最佳实践(拓展学习) 知晓当前是在哪一个 Activity 随时随地退出程序 启动 Activity 的最佳写法 ...

  8. 探究活动-Activity

    探究Android Activity 1.活动是什么 Activity是最容易吸引  用户 的东西 Activiy是一种包含 用户界面的组件 主要用于和用户进行交互         一个applica ...

  9. Android正向开发(一) Activity

    Android 正向开发--Activity 活动(Activity)是什么 Activity的基本用法 创建活动 手动创建 Activity 界面相关 创建布局,添加按钮 加载布局 补:定义& ...

最新文章

  1. python是如何进行内存管理的
  2. 二分查找法的实现和应用汇总
  3. mysql查看锁表与解锁
  4. 【TensorRT】将 PyTorch 转化为可部署的 TensorRT
  5. 如何逃离「信息茧房」?
  6. 具有Akka反应流的反应队列
  7. 休眠事实:访存策略的重要性
  8. java学习(84):object常用方法tostring,equals,hashcode
  9. arduinowin7_win7系统64位系统安装Arduino uno R2 驱动的方法
  10. python反转字符串的六种方法
  11. 【华为云技术分享】使用CloudIDE快速体验基于华为云ModelArts SDK的AI开发
  12. px、pt、em、rem 的区别
  13. Linux—计划任务管理
  14. python创意小作品-python turtle库的几个小demo
  15. 夯实Java基础(八)——代码块
  16. 机器翻译与人工智能研究报告(2018年第五期)
  17. Uplift 经典模型介绍
  18. Oracle 协议设配器错误解决方案
  19. 机器学习实战-预测数值型数据:回归
  20. 单片机里程计量设计c语言,基于单片机的出租车计价器的里程计算设计

热门文章

  1. Linux内核4.10在龙芯3A3000笔记本上的移植
  2. ZWAVE Notification Command Class, Version 3-8
  3. C语言中打印结果如何保留两位、三位小数以及整数?
  4. 数据库中常说的steal和force到底是什么
  5. 山西省审计计算机培训,山西省审计厅审计管理系统(OA)正式投入使用
  6. 北京精雕电主轴用海德汉编码器AK ERM280/2480/TTRERM2404/vs sensorik编码器RGM2G-AE3-V3Z参数接线定义
  7. 机器学习之MATLAB代码--IWOA_BILSTM(基于改进鲸鱼算法优化的BiLSTM预测算法)(十六)
  8. 分享券商量化交易接口申请流程
  9. 考博英语-连接词because和while的用法
  10. su切换用户无需输入密码