我们知道android中activity的启动模式有四种,分别为standard,singleTop,singleTask,singleTop。关于这四种启动模式的详细介绍请看http://blog.csdn.net/congqingbin/article/details/7441789该博文介绍的非常详细,我就不在这里多说了。下面我们列举singleTop和singleTask的一个应用。就是我们应用程序的退出。

一、singleTop应用

我们在启动应用程序的时候,可以先用一个空的Activity来作为入口,并且在manifest文件中加入android:launchMode="singleTop" 
                                                                


源代码如下:

HomeActivity:

public class FlashActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.d("mm", "FlashActivity onCreate"+getTaskId());Intent intent = new Intent(this,Main.class);startActivity(intent);super.onCreate(savedInstanceState);}@Overrideprotected void onNewIntent(Intent intent) {Log.d("mm", "FlashActivity onNewIntent");//当flag为FLAG_ACTIVITY_CLEAR_TOP的时候,本Activity也要finish掉
if(intent.getFlags() == Intent.FLAG_ACTIVITY_CLEAR_TOP){finish();}super.onNewIntent(intent);}@Overrideprotected void onDestroy() {Log.d("mm", "FlashActivity ondes");super.onDestroy();}}
MainActivity代码

public class Main extends Activity {//微信申请时的IDboolean isRun = true;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.view_stub);        final ArrayList list = new ArrayList();        final ArrayList list2 = new ArrayList();        if ((((int) (Math.random() * 100)) & 0x01) == 0) {              // to show text              // all you have to do is inflate the ViewStub for textview              ViewStub stub = (ViewStub) findViewById(R.id.viewstub_demo_text);              stub.inflate();              TextView text = (TextView) findViewById(R.id.viewstub_demo_textview);              text.setText("The tree of liberty must be refreshed from time to time" +                      " with the blood of patroits and tyrants! Freedom is nothing but " +                      "a chance to be better!");                      text.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {           startActivity();}});        } else {                // to show image              // all you have to do is inflate the ViewStub for imageview              ViewStub stub = (ViewStub) findViewById(R.id.viewstub_demo_image);              stub.inflate();              final ImageView image = (ImageView) findViewById(R.id.viewstub_demo_imageview);              image.setImageResource(R.drawable.icon);              image.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startActivity();}});        }                         public void startActivity(){    Intent intent = new Intent();    intent.setClass(this, MyActivity.class);    startActivity(intent);    }        @Overrideprotected void onDestroy() {Log.d("mm", "MainActivity ondes");super.onDestroy();}}
MyActivity的代码

public class MyActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ImageView image = new ImageView(this);image.setBackgroundResource(android.R.color.darker_gray);setContentView(image);Intent intent = new Intent(this, MMService.class);startService(intent);Log.d("mm", "MyActivity onCreate"+getTaskId());}@Overridepublic void onBackPressed() {Log.d("mm", "MyActivity onBackPressed");//监听返回键,这时候我们要退出程序的话,要返回到FlashActivityIntent intent = new Intent(this,FlashActivity.class);//如果想通过把Task栈中的Activity全部给finish掉的话,就必须设置这个flag,//不然的话FlashActivity就会又创建一个新的FlashActivityintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);super.onBackPressed();}@Overrideprotected void onDestroy() {Log.d("mm", "MyActivity ondes");super.onDestroy();}}

这样就可以把Task中所有的Activity都能够finish掉了

二、singleTask

singleTask就是设置为singleTask的Activity,在栈中只有一个实例,无论该Activity是在栈顶还是栈底,只要有被召唤就从栈中提到栈顶,当然它以上的Activity都会被finish掉,所以我们可以把FlashActivity的launchmode改为singleTask的话也是可以的。



但是MyActivity中flag就不用在设置了

public class MyActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ImageView image = new ImageView(this);image.setBackgroundResource(android.R.color.darker_gray);setContentView(image);Intent intent = new Intent(this, MMService.class);startService(intent);Log.d("mm", "MyActivity onCreate"+getTaskId());}@Overridepublic void onBackPressed() {Log.d("mm", "MyActivity onBackPressed");//监听返回键,这时候我们要退出程序的话,要返回到FlashActivityIntent intent = new Intent(this,FlashActivity.class);//如果想通过把Task栈中的Activity全部给finish掉的话,就必须设置这个flag,//不然的话FlashActivity就会又创建一个新的FlashActivity//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);super.onBackPressed();}@Overrideprotected void onDestroy() {Log.d("mm", "MyActivity ondes");super.onDestroy();}}

关于Activity的启动模式的应用还有很多,根据自己的业务的需要,来设置。

更多相关文章

  1. Android - Android应用程序(Application)的主要组件
  2. Android Studio中同步代码时报:Received status code 400 from se
  3. Android夜间模式官方api实现(AppCompatDelegate)
  4. android java代码覆盖率
  5. android设置全屏模式
  6. Android对话框风格的Activity代码
  7. Android 删除指定文件代码
  8. Android摄像头视频帧数据测试代码

随机推荐

  1. Android浏览器如何打开网页
  2. Android(安卓)MaterialDesign中颜色
  3. IntentService 和ResultReceiver
  4. 自定義Dialog去除背景陰影
  5. Android(安卓)利用ClipDrawable 自定义进
  6. Android按键拦截处理最佳实践范例(以Back
  7. Android跳转到系统Wifi界面的方式
  8. Android中全屏无标题设置
  9. Android自定义相机镂空遮罩
  10. Android中DecimalFormat的用法