有关Android活动——写给自己看
来源:互联网 发布:天刀捏详细步骤脸数据 编辑:程序博客网 时间:2024/06/06 15:36
一.活动的4种启动模式
Android是使用返回栈来管理活动的,每个应用程序都会有自己的返回栈。且 Android活动共有4种启动模式,在AndroidManifest.xml文件中通过给<activity>标签指定android:launchMode属性来选择启动模式,下面列出4种模式:
1.standard模式:standard是活动默认的启动模式,对于使用standard模式的活动,系统不会在乎这个活动是否已经存在返回栈中,每次启动都会创建该活动的一个实例。
2.singleTop模式:当活动的启动模式指定为singleTop时,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建一个新的活动实例,若该活动不在栈顶,则再次创建一个新的活动实例。
3.singleTask模式:当活动的启动模式指定为singleTask时,在启动活动时系统会首先检查返回栈中是否存在该活动实例,若存在,则使用该活动实例并将在这个活动之上的其余活动统统出栈,否则,创建一个新的活动实例。
4.singleInstance模式:当活动的启动模式指定为singleInstance时,会有一个单独的返回栈来管理这个活动,不管是哪个应用程序访问这个活动,都使用同一个返回栈。解决共享活动实例问题。
二.对活动进行管理
1.知晓当前是在哪一个活动:
可通过新建一个BaseActivity类,让其继承自AppCompatActivity类,并重写onCreate()方法,使用getClass().getSimpleName()方法来获取当前实例的类名。
2.增加一键退出功能:
通过用一个专门的集合类来对所有的活动进行管理即可。新建一个ActivityCollector类作为活动管理器,:
public static List<Activity> activities = new ArrayList<>();
在活动管理器中通过一个List来暂存活动。再提供一个addActivity(Activity activity)和remove(Activity activity)方法分别用于向List中添加和移除一个活动。最后提供一个finishAll()方法用于将List中存储的活动全部销毁,代码如下:
public static void finishAll(){
for(Activity activity:activities){
if(!activity.isFinishing()){
activity.finish();
}
}
}
在onCreate()方法中调用addActivity()方法,将正在创建的活动添加进活动管理器中,在onDestory()方法中调用removeActivity()方法,将一个马上要销毁的活动移除出活动管理器。当想退出程序时,调用finishAll()方法即可。
3.活动启动的最佳写法:
在活动中添加一个actionStart(Context context,需要传进的此活动的数据类型 xx)方法。在此方法中完成Intent的构建,并用intent.putExtra()方法获取上一个活动传送过来的数据,在用context.startActivity()方法启动本活动。
这样,即使不阅读此活动的代码,也可以非常清晰的知道启动本活动需要传递哪些数据。
- 有关Android活动——写给自己看
- Android进阶—写给自己的计划
- 写给自己看的
- android动画要点,写给自己看,都是读过来的。
- 写给自己看的文章
- 无题!写给自己看的!
- 2016年,写给自己看
- 今天才看清楚这才是我的轨迹——写给处于转折点的自己
- 写给我自己看的文章
- 写给我自己看的文章1
- 开博,写给自己看,全新出发!
- 写给自己看的循环队列
- 字符串总结--写给自己看的
- 继承qstringlist ,写给自己看的
- 乱七八糟的东西写给自己看的
- 机器学习(写给自己看的)
- 写给自己看的五子棋人机思路
- 写给自己看的OpenCV配置指南 :-)
- 394. Decode String
- 进程基础知识思维导图
- 信息奥赛 约瑟夫环问题
- 345. Reverse Vowels of a String
- Java对象的序列化和反序列化及其实现和使用
- 有关Android活动——写给自己看
- 顺序结构、动态链表结构下的一元多项式的加法、减法等的实现
- 【redis】redis的bind配置
- JSP内容整理之JavaBeans与JSP动作元素
- 【Python学习】python不要使用任何模块名作为文件名(module 'xgboost' has no attribute 'DMatrix')
- c++:vector类编写简易通讯录
- react native Warning: setState(...): Can only update a mounted or mounting component.
- JavaScript中变量的声明以及如何使用
- HTML/CSS第一次作业(小薇学院任务)