Android 启动模式
来源:互联网 发布:unity3d工程师笔试题 编辑:程序博客网 时间:2024/06/18 18:16
1Task与BackStack的概念
在Android中通过任务(Task)来管理活动,Task就是一些列活动的集合。每个应用程序运行都会对应创建一个Task,android通过BackStack来管理Task。
Task的活动按启动的先后顺序,依次保存到BackStack中,每个Task都有自己对应的id号(非R文件中),可以通过getTaskId()方法获得。
每当新建一个活动时,该活动就会在BackStack中入栈,并且处于栈顶位置。当按下back建或者finish活动时,这个活动就会出栈,这时下一个活动就会处于栈顶位置。
2在AndroidManifes文件中配置Activity的启动模式
Activity的启动模式对我们来说是一个新的概念,在实际开发过程中会给一些Activity设定恰当的启动模式来实现特定的需求。
启动模式一共分为四种,分别为:standard、singleTop、singleTask和singleInstance,可在AndroidManifest.xml中通过给标签指定android:launchMode属性来选择启动模式。
<activityandroid:name=".MainActivity"android:label="@string/app_name"android:launchMode="standard">
3 standard启动模式
Standard叫做标准启动模式,是活动启动的默认模式,即使不在指定该模式的情况下,活动都还是会以该模式启动。在standard模式下的活动,不管活动是否存在每次启动都会新建这个活动。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("Tag", "MainActivityonCreate"+getTaskId()); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, MainActivity.class)); } }); } @Override protected void onDestroy() { super.onDestroy(); Log.d("Tag", "MainActivityonDestroy"); }}
4singleTop启动模式
SingleTop:共享栈顶模式,
在启动这一类活动时,系统会先检测当前 Task,看该 Task 的栈顶是不是
该活动的实例,如果是的话,就不需要再创建该活动实例
但是这个启动模式只针对栈顶元素。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("Tag", "onCreate"+getTaskId()); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this,MainActivity.class)); } }); }}
AndroidManifest.xml
<activity android:name="com.example.android_818_singletop.MainActivity" android:label="@string/app_name" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
5 singleTask启动模式
SingleTask 又叫共享栈,每次启动该活动时系统会首先在BackStack中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。SingleTask适合作为程序入口点。例如程序主界面
<activity android:name="com.example.android_818_singletask.MainActivity" android:label="@string/app_name" android:launchMode="singleTask" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("Tag", "MainActivity_onCreate"+getTaskId()); findViewById(R.id.btn1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); } @Override protected void onDestroy() { super.onDestroy(); Log.d("Tag", "MainActivity_onDestroy"+getTaskId()); }}
secondActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("Tag", "MainActivity_onCreate"+getTaskId()); findViewById(R.id.btn1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); } @Override protected void onDestroy() { super.onDestroy(); Log.d("Tag", "MainActivity_onDestroy"+getTaskId()); }}
ThirdActivity.java
public class ThirdActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_three); Log.d("Tag", "ThirdActivity_onCreate"+getTaskId()); findViewById(R.id.btn3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(ThirdActivity.this, MainActivity.class)); } }); } @Override protected void onDestroy() { super.onDestroy(); Log.d("Tag", "ThirdActivity_onDestroy"+getTaskId()); }}
6.singleInstance启动模式(共享引用)
SingleInstance模式是这四种模式中最为特殊的,指定为singleInstance模式的活动启动时,会用一个新的BackStack来管理该活动。
<activity android:name="com.example.android_818_singletask.SecondActivity" android:launchMode="singleInstance"></activity><activity android:name="com.example.android_818_singletask.ThirdActivity"></activity> <activityandroid:name="com.example.android_818_singletask.FourActivity" android:launchMode="singleInstance"></activity>
- android Activity启动模式
- Android Activity启动模式
- android 启动模式
- Android 启动模式
- android中四种启动模式
- android ics 启动模式
- android启动模式
- android启动模式
- Android启动模式分析
- Android Activity启动模式
- android 启动模式(二)
- android 启动模式
- android activity 启动模式
- android 启动模式
- Android的启动模式
- android的启动模式
- Android - Activity - 启动模式
- android Activity启动模式
- Ubuntu使用git
- 多个线程访问共享对象和数据的方式
- linux 查看进程启动时间(运行时间)
- 工作日志
- Spring Boot Memory Performance
- Android 启动模式
- el表达式string强制转换成long报错
- android 5.0 新的特性
- 人才篇-如何识人用人
- Climbing Stairs
- mysql完成字符串分割
- 转载:C++ 实现银行排队服务模拟
- CodeForces 660A Co-prime Array
- 上传应用程序编译时报错:clang: error: unable to execute command: Segmentation fault: 11