四种启动模式
来源:互联网 发布:snh48家境 知乎 编辑:程序博客网 时间:2024/06/03 20:49
1.怎么设置activity的启动模式.
在Manifast.xml文件中添加android:launchMode="singleTask"
<activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter></activity>
2.Activity四种启动模式
<1.standard
标准启动模式,也就是默认的模式,标准模式,每次都会创建一个实例,A启动A,还是会创建实例.
<2.singleTop (适合接受通知启动的内容显示页面)
单一栈顶模式,在栈的顶部只能存在唯一的一个实例,及A启动A的话,就不会去创建实例.
<3.singleTask (可作为程序的入口,其他应用启动浏览器,只会启动主界面有一次,会清空主界面上面的其他页面)
单一实例模式,在栈里面只存在一个实例,如果已经存在,则将task中在他之上的activity destroy掉,并调用它的onnewintent.
程序一(TASK1):启动程序二
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("TAG", "onCreate: ------------------TASK1_on:"+getTaskId()); Button button = (Button) findViewById(R.id.bt); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent =new Intent("com.viking.task2"); startActivity(intent); } }); } @Override protected void onNewIntent(Intent intent) { Log.e("TAG", "onNewIntent: ---------------TASK1_new:"+getTaskId()); super.onNewIntent(intent); }}程序二(TASK2):程序2.1(MainActivity ),启动程序2.2(Second(为singletask启动模式))
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.bt); Log.e("TAG", "onCreate:------------------- TASK2.1_on:"+getTaskId()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Second.class); startActivity(intent); } }); } @Override protected void onNewIntent(Intent intent) { Log.e("TAG", "onNewCreate:-------------------TASK2.1_new:"+getTaskId()); super.onNewIntent(intent); }}public class Second extends AppCompatActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Log.e("TAG", "onCreate: ---------------- TASK2.2_on:"+getTaskId()); } @Override protected void onResume() { super.onResume(); } @Override protected void onNewIntent(Intent intent) { Log.e("TAG", "onNewIntent: ---------------TASK2.2_new:"+getTaskId()); super.onNewIntent(intent); }}
演示分为两种情况:
1.如果先启动TASK1,通过TASK1启动TASK2.1,再通过TASK2.1启动TASK2.2.
首先会先启动一个TASK1的任务栈,将TASK1存放进去,启动TASK2.1的时候,由于TASK2.1是Standard模式,所以将TASK2.1存进TASK1任务栈里面,
再通过TASK2.1启动TASK2.2,由于TASK2.2是SingleTask模式,所以是创建一个TASK2的任务栈,将TASK2.2存入,如果你此时打开TASK2程序,则
会显示TASK2.2页面,按返回键会直接退出TASK2程序(因为TASK2任务栈里面只有TASK2.2这个activity).
2.如果先启动TASK2程序,通过TASK2.1启动TASK2.2.按home键,再启动TASK1程序,再通过TASK1启动TASK2.1,再通过TASK2.1启动TASK2.2.
首先会先创建一个TASK2的任务栈,先将TASK2.1存入TASK2任务栈中,再启动TASK2.2的时候,由于是在同一程序中启动,所以不会去
创建新的任务栈,而是会直接将TASK2.2存入TASK2中.当启动TASK1程序的时候,会创建一个TASK1的任务栈,将TASK1存入栈中,再通过
TASK1启动TASK2.1的时候,这时会将TASK2.1存入TASK1中,再通过TASK2.1启动TASK2.2的时候,系统会查看是否有启动TASK2中的TASK2.2,由于
之前就启动了TASK2.2,所以就会跳到TASK2栈的TASK2.2,此时回退的话先是TASK2栈的TASK2.2>>TASK2栈的TASK2.1>>TASK1栈的TASK2.1
>>TASK1栈的TASK1
<4.singleInstance(适合与程序分离的页面如:来电页面,闹铃页面)
单一任务栈模式,创建一个独立的任务栈来存放该activity.
阅读全文
0 0
- 四种启动模式
- 四种启动模式
- 四种启动模式
- Activity四种启动模式
- activity四种启动模式
- activity四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- Activity_四种启动模式
- Android四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- Activity四种启动模式
- android 四种启动模式
- Failed to read candidate component class错误分析
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
- 快速开发android应用5-使用picasso实现轮播图
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
- windows安装多个JDK, JDK切换
- 四种启动模式
- 如何通过一个程序启动另外一个程序
- 构建Android缓存模块(原理分析)
- Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比
- ImageLoader深入源码学习探究
- webkit源码解读-FileList
- 二维卷积/矩阵卷积
- Android属性动画完全解析(上),初识属性动画的基本用法
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法