Android启动模式(三种)

时间:2021-07-22 22:13:59

1,标准启动模式

  通过任务栈,每点一次button,将每一个实例都压入,然后点返回键时候,就弹出之前压入的实例。

    每一次的地址都是不同的

    测试代码:通过创建一个button和textView来显示本身的TastId和实例的ID

 public class MainActivity extends AppCompatActivity {

     private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tv= (TextView) findViewById(R.id.tv); tv.setText(String.format("TaskId:%d\nCurrent Activity ID:%s",getTaskId(),toString()));
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,MainActivity.class));
}
});
} }

2,singleTop

这种模式需要在AndroidManifest中进行配置

  地址不变

  

原因:如字面意思,Top,即在栈顶,只能创建一个实例

android:launchMode="singleTop"
如果不配置,就默认为standard 也就是第一种
 <activity
android:launchMode="singleTop"
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

3,singleTask与singleInstance

  只需要把配置文件中的lauchMode改为singleTask或者singleInstance

   (1)singleTask 

     Android启动模式(三种) Android启动模式(三种)Android启动模式(三种)

      当此时运行时,main点击按钮,跳转到B,然后我们在点按钮跳转回A,发现地址没有变化。

      但是,如果此时,我们点击返回按钮,程序就会退出!

    原因:当我们第二次点击按钮时,程序会直接把B弹出任务栈以外,栈内只剩下main

    (2)singleInstance

      Android启动模式(三种)Android启动模式(三种)

      每次点击按钮,main和B的地址都固定了。

    原因:存在于一个独立的任务栈中,只含有一个activity。

      此外,我们在点击按钮时,应该注意到,明显的切换页面的效果。

        也要注意到taskID的变化(taskID就是任务栈的编号)