• Android入门之Activity四种启动模式


    一、启动模式介绍

    启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的<Activity>标签的android:launchMode属性设置;
    启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;
    讲解启动模式之前,有必要先讲解一下“任务栈”的概念;
     
    任务栈
     
    每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1-->Activity2-->Activity3,则任务栈为:

     
     
    启动模式
     
     
    (1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;【达内3G培训
    (2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;

    (3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

    (4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;【达内3G培训

     
     
     
    二、代码实例
     
     
     
    1.standard
     
     
    场景描述:MainActivity点击按钮激活自己,但是MainActivity的引用发生改变;
     
    效果:
     

     
     
    AndroidManifest.xml
     
    [java] view plaincopyprint?
    1. <activity
    2. android:name=".MainActivity"
    3. android:label="@string/app_name" android:launchMode="standard">
     
    MainActivity.java
     
    [java] view plaincopyprint?
    1. package com.xiazdong.launchmode;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.view.View.OnClickListener;
    7. import android.widget.Button;
    8. import android.widget.TextView;
    9. publicclass MainActivity extends Activity {
    10. private Button standardButton;
    11. private TextView showView;
    12. private OnClickListener listener = new OnClickListener(){
    13. @Override
    14. publicvoid onClick(View v) {
    15. Intent intent = new Intent(MainActivity.this,MainActivity.class);
    16. startActivity(intent);
    17. }
    18. };
    19. @Override
    20. publicvoid onCreate(Bundle savedInstanceState) {
    21. super.onCreate(savedInstanceState);
    22. setContentView(R.layout.main);
    23. showView = (TextView)this.findViewById(R.id.showview);
    24. standardButton = (Button)this.findViewById(R.id.standard);
    25. standardButton.setOnClickListener(listener);
    26. showView.setText(this.toString());
    27. }
    28. }


    2.singleTop
     
     
    场景描述:MainActivity自己激活自己,但是MainActivity并没有创建实例,即引用不变;
     
    效果:【达内3G培训
     

     
    AndroidManifest.xml
     
    [html] view plaincopyprint?
    1. <activity
    2. android:name=".MainActivity"
    3. android:label="@string/app_name"android:launchMode="singleTop">


    MainActivity.java

     
    [java] view plaincopyprint?
    1. package com.xiazdong.launchmode;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.view.View.OnClickListener;
    7. import android.widget.Button;
    8. import android.widget.TextView;
    9. publicclass MainActivity extends Activity {
    10. private Button standardButton;
    11. private TextView showView;
    12. private OnClickListener listener = new OnClickListener(){
    13. @Override
    14. publicvoid onClick(View v) {
    15. Intent intent = new Intent(MainActivity.this,MainActivity.class);
    16. startActivity(intent);
    17. }
    18. };
    19. @Override
    20. publicvoid onCreate(Bundle savedInstanceState) {
    21. super.onCreate(savedInstanceState);
    22. setContentView(R.layout.main);
    23. showView = (TextView)this.findViewById(R.id.showview);
    24. standardButton = (Button)this.findViewById(R.id.standard);
    25. standardButton.setOnClickListener(listener);
    26. showView.setText(this.toString());
    27. }
    28. }

    3.singleTask
     
     
    场景描述:
     
    MainActivity 的启动模式为singleTask,MainActivity激活OtherActivity,然后OtherActivity激活 MainActivity,发现MainActivity引用不变,然后MainActivity再次激活OtherActivity,但是 OtherActivity的引用变了;
     
    效果:
     

     
     
    AndroidManifest.xml
     
    [html] view plaincopyprint?
    1. <activity
    2. android:name=".MainActivity"
    3. android:label="MainActivity"android:launchMode="singleTask">
    4. </activity>
    5. <activity
    6. android:name=".OtherActivity"android:launchMode="singleTask"android:label="OtherActivity"
    7. ></activity>

    MainActivity和OtherActivity就是简单的代码,略;
     
     
    4.singleInstance
     
     
    场景描述:App1应用和App2应用分别激活SingleInstance应用的MainActivity,发现两个应用激活后MainActivity的引用一样;
     
    效果:
     

     
     
    SingleInstance的AndroidManifest.xml
     
    [html] view plaincopyprint?
      1. <activity
      2. android:name=".MainActivity"
      3. android:label="@string/app_name"android:launchMode="singleInstance">
  • 相关阅读:
    unity 用LineRender画四边形并测面积
    unity读取Texture文件并转为Sprit
    unity shader入门(四):高光
    unity shader入门(三)逐像素光照,Blinn-Phong模型
    unity shader入门(二)语义,结构体,逐顶点光照
    unity shader入门(一):基本结构话痨版
    好多坑,好多好多坑(1)
    点击按钮收缩功能
    unity 实现技能释放
    ugui用户定义操作按键
  • 原文地址:https://www.cnblogs.com/Codenewbie/p/3031006.html
Copyright © 2020-2023  润新知