• android 完全退出应用程序(重要)


    android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中Activity退出,调用上面的方法,往往会销毁当前的Activity返回上一个Activity。当然也可以逐个返回上一个Activity,直到跳转到入口的Activity,最后退出应用程序。但这样比较麻烦,而且逐个返回的体验并不友好。

    网上比较流行的方法是定义栈,写一个ExitApplication类,利用单例模式管理Activity,在每个在Activity的onCreate()方法中调用ExitApplication.getInstance().addActivity(this)方法,在退出时调用ExitApplication.getInstance().exit()方法,就可以完全退出应用程序了。
    ExitApplication类
    代码如下:

    1. import java.util.LinkedList;  
    2. import java.util.List;  
    3.   
    4. import android.app.Activity;  
    5. import android.app.Application;  
    6.   
    7. public class ExitApplication extends Application {  
    8.   
    9.     private List activityList = new LinkedList();  
    10.     private static ExitApplication instance;  
    11.   
    12.     private ExitApplication()  
    13.     {  
    14.     }  
    15.     //单例模式中获取唯一的ExitApplication实例  
    16.     public static ExitApplication getInstance()  
    17.     {  
    18.     if(null == instance)  
    19.     {  
    20.     instance = new ExitApplication();  
    21.     }  
    22.     return instance;   
    23.   
    24.     }  
    25.     //添加Activity到容器中  
    26.     public void addActivity(Activity activity)  
    27.     {  
    28.     activityList.add(activity);  
    29.     }  
    30.     //遍历所有Activity并finish  
    31.   
    32.     public void exit()  
    33.     {  
    34.   
    35.     for(Activity activity:activityList)  
    36.     {  
    37.     activity.finish();  
    38.     }  
    39.   
    40.     System.exit(0);  
    41.   
    42.     }  
    43.     }  

    下面的三个类IndexActivity, BActivity,CActivity是简单的例子,分别是IndexActivity–>BActivity–>CActivity的跳转顺序。在每个Activity类中onCreate()方法中调用ExitApplication.getInstance().addActivity(Activity activity)方法。在任何一个Activity界面退出应用程序时,只要调用ExitApplication.getInstance().exit()方法,就可以在任何一个Activity中完全退出应用程序。
    IndexActivity 类源代码:

    1. import android.app.Activity;  
    2. import android.content.Intent;  
    3. import android.os.Bundle;  
    4. import android.view.View;  
    5. import android.view.View.OnClickListener;  
    6. import android.widget.Button;  
    7.   
    8. public class IndexActivity extends Activity {  
    9.     /** Called when the activity is first created. */  
    10.     @Override  
    11.     public void onCreate(Bundle savedInstanceState) {  
    12.         super.onCreate(savedInstanceState);  
    13.         setContentView(R.layout.main);  
    14.   
    15.         Button next=(Button)findViewById(R.id.next_to_b);  
    16.         next.setOnClickListener(nextClick);  
    17.   
    18.         Button exit=(Button)findViewById(R.id.exit_main);  
    19.         exit.setOnClickListener(exitClick);  
    20.         ExitApplication.getInstance().addActivity(this);  
    21.   
    22.     }  
    23.   
    24.     OnClickListener nextClick=new OnClickListener() {  
    25.   
    26.         @Override  
    27.         public void onClick(View v) {  
    28.             // TODO Auto-generated method stub  
    29.   
    30.             Intent intent=new Intent(IndexActivity.this,BActivity.class);  
    31.             startActivity(intent);  
    32.   
    33.         }  
    34.     };  
    35.   
    36.     OnClickListener exitClick=new OnClickListener() {  
    37.   
    38.         @Override  
    39.         public void onClick(View v) {  
    40.             // TODO Auto-generated method stub  
    41.             ExitApplication.getInstance().exit();  
    42.         }  
    43.     };  
    44. }  

    BActivity 类源代码:

    1. import android.app.Activity;  
    2. import android.content.Intent;  
    3. import android.os.Bundle;  
    4. import android.view.View;  
    5. import android.view.View.OnClickListener;  
    6. import android.widget.Button;  
    7.   
    8. public class BActivity extends Activity {  
    9.   
    10. @Override  
    11. protected void onCreate(Bundle savedInstanceState) {  
    12. // TODO Auto-generated method stub  
    13. super.onCreate(savedInstanceState);  
    14.   
    15. setContentView(R.layout.b);  
    16. Button next_to_c=(Button)findViewById(R.id.next_to_c);  
    17. next_to_c.setOnClickListener(next_to_cClick);  
    18.   
    19. Button exit_b=(Button)findViewById(R.id.exit_b);  
    20. exit_b.setOnClickListener(exitClick);  
    21. ExitApplication.getInstance().addActivity(this);  
    22.   
    23. }  
    24.   
    25. OnClickListener next_to_cClick=new OnClickListener() {  
    26.   
    27. @Override  
    28. public void onClick(View v) {  
    29. // TODO Auto-generated method stub  
    30.   
    31. Intent intent=new Intent(BActivity.this,CActivity.class);  
    32. startActivity(intent);  
    33.   
    34. }  
    35. };  
    36.   
    37. OnClickListener exitClick=new OnClickListener() {  
    38.   
    39. @Override  
    40. public void onClick(View v) {  
    41. // TODO Auto-generated method stub  
    42. ExitApplication.getInstance().exit();  
    43. }  
    44. };  
    45. }  

    CActivity 类源代码:

      1. import android.app.Activity;  
      2. import android.os.Bundle;  
      3. import android.view.View;  
      4. import android.view.View.OnClickListener;  
      5. import android.widget.Button;  
      6.   
      7. public class CActivity extends Activity{  
      8.   
      9. @Override  
      10. protected void onCreate(Bundle savedInstanceState) {  
      11. // TODO Auto-generated method stub  
      12. super.onCreate(savedInstanceState);  
      13.   
      14. setContentView(R.layout.c);  
      15.   
      16. Button exit_c=(Button)findViewById(R.id.exit_c);  
      17. exit_c.setOnClickListener(exitClick);  
      18. ExitApplication.getInstance().addActivity(this);  
      19.   
      20. }  
      21.   
      22. OnClickListener exitClick=new OnClickListener() {  
      23.   
      24. @Override  
      25. public void onClick(View v) {  
      26. // TODO Auto-generated method stub  
      27. ExitApplication.getInstance().exit();  
      28. //如果只是调用以下其中的一个方法,并不会完全退出应用  
      29. //android.os.Process.killProcess(android.os.Process.myPid());  
      30. //System.exit(0);  
      31. }  
      32. };  
      33.   
      34. }  

    http://www.yoyong.com/archives/199

  • 相关阅读:
    [luogu4799 CEOI2015 Day2] 世界冰球锦标赛(折半搜索)
    [luogu3230 HNOI2013] 比赛 (搜索+Hash)
    [luogu2317 HNOI2005] 星际贸易 (dp)
    [luogu2414 NOI2011]阿狸的打字机 (AC自动机)
    [bzoj3507 Cqoi2014]通配符匹配 (hash+DP)
    [luogu2054 AHOI2005] 洗牌 (数论)
    bzoj1491 [NOI2007]社交网络
    bzoj1022 [SHOI2008]小约翰的游戏John
    bzoj1088 [SCOI2005]扫雷Mine
    bzoj1295 [SCOI2009]最长距离
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4447322.html
Copyright © 2020-2023  润新知