android 完全退出應(yīng)用程序
          android android 退出應(yīng)用程序, 單例模式管理Activity
          引自:http://www.yoyong.com/archives/199
          android 退出應(yīng)用程序會(huì)調(diào)用android.os.Process.killProcess(android.os.Process.myPid())
          或是System.exit(0),這只是針對(duì)第一個(gè)Activity(也就是入口的Activity)時(shí)生效。如果有A,B,C
          三個(gè)Activity,而想在B 或C 中Activity 退出,調(diào)用上面的方法,往往會(huì)銷(xiāo)毀當(dāng)前的Activity 返回上
          一個(gè)Activity。當(dāng)然也可以逐個(gè)返回上一個(gè)Activity,直到跳轉(zhuǎn)到入口的Activity,最后退出應(yīng)用程
          序。但這樣比較麻煩,而且逐個(gè)返回的體驗(yàn)并不友好。
          網(wǎng)上比較流行的方法是定義棧,寫(xiě)一個(gè)ExitApplication 類(lèi),利用單例模式管理Activity,在每個(gè)在
          Activity 的onCreate()方法中調(diào)用ExitApplication.getInstance().addActivity(this)方法,在退
          出時(shí)調(diào)用ExitApplication.getInstance().exit()方法,就可以完全退出應(yīng)用程序了。
          ExitApplication 類(lèi)
          代碼如下:
          view plaincopy to clipboardprint?
          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 {


          9 private List<Activity> activityList=new LinkedList<Activity>();

          10 private static ExitApplication instance;
          11
          12 private ExitApplication()
          13 {
          14 }
          15 //單例模式中獲取唯一的ExitApplication 實(shí)例
          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 }
          下面的三個(gè)類(lèi)IndexActivity, BActivity,CActivity 是簡(jiǎn)單的例子, 分別是
          IndexActivity–>BActivity–>CActivity 的跳轉(zhuǎn)順序。在每個(gè)Activity 類(lèi)中onCreate()方法中調(diào)
          用ExitApplication.getInstance().addActivity(Activity activity)方法。在任何一個(gè)Activity 界面退
          出應(yīng)用程序時(shí),只要調(diào)用ExitApplication.getInstance().exit()方法,就可以在任何一個(gè)Activity
          中完全退出應(yīng)用程序。
          IndexActivity 類(lèi)源代碼:
          view plaincopy to clipboardprint?
          44 import android.app.Activity;
          45 import android.content.Intent;
          46 import android.os.Bundle;
          47 import android.view.View;
          48 import android.view.View.OnClickListener;
          49 import android.widget.Button;
          50
          51 public class IndexActivity extends Activity {
          52 /** Called when the activity is first created. */
          53 @Override
          54 public void onCreate(Bundle savedInstanceState) {
          55 super.onCreate(savedInstanceState);
          56 setContentView(R.layout.main);
          57
          58 Button next=(Button)findViewById(R.id.next_to_b);
          59 next.setOnClickListener(nextClick);
          60
          61 Button exit=(Button)findViewById(R.id.exit_main);
          62 exit.setOnClickListener(exitClick);
          63 ExitApplication.getInstance().addActivity(this);
          64
          65 }
          66
          67 OnClickListener nextClick=new OnClickListener() {
          68
          69 @Override
          70 public void onClick(View v) {
          71 // TODO Auto-generated method stub
          72
          73 Intent intent=new Intent(IndexActivity.this,BActivity.class);
          74 startActivity(intent);
          75
          76 }
          77 };
          78
          79 OnClickListener exitClick=new OnClickListener() {
          80
          81 @Override
          82 public void onClick(View v) {
          83 // TODO Auto-generated method stub
          84 ExitApplication.getInstance().exit();
          85 }
          86 };
          87 }
          BActivity 類(lèi)源代碼:
          view plaincopy to clipboardprint?
          88 import android.app.Activity;
          89 import android.content.Intent;
          90 import android.os.Bundle;
          91 import android.view.View;
          92 import android.view.View.OnClickListener;
          93 import android.widget.Button;
          94
          95 public class BActivity extends Activity {
          96
          97 @Override
          98 protected void onCreate(Bundle savedInstanceState) {
          99 // TODO Auto-generated method stub
          100 super.onCreate(savedInstanceState);
          101
          102 setContentView(R.layout.b);
          103 Button next_to_c=(Button)findViewById(R.id.next_to_c);
          104 next_to_c.setOnClickListener(next_to_cClick);
          105
          106 Button exit_b=(Button)findViewById(R.id.exit_b);
          107 exit_b.setOnClickListener(exitClick);
          108 ExitApplication.getInstance().addActivity(this);
          109
          110 }
          111
          112 OnClickListener next_to_cClick=new OnClickListener() {
          113
          114 @Override
          115 public void onClick(View v) {
          116 // TODO Auto-generated method stub
          117
          118 Intent intent=new Intent(BActivity.this,CActivity.class);
          119 startActivity(intent);
          120
          121 }
          122 };
          123
          124 OnClickListener exitClick=new OnClickListener() {
          125
          126 @Override
          127 public void onClick(View v) {
          128 // TODO Auto-generated method stub
          129 ExitApplication.getInstance().exit();
          130 }
          131 };
          132 }
          CActivity 類(lèi)源代碼:
          view plaincopy to clipboardprint?
          133 import android.app.Activity;
          134 import android.os.Bundle;
          135 import android.view.View;
          136 import android.view.View.OnClickListener;
          137 import android.widget.Button;
          138
          139 public class CActivity extends Activity{
          140
          141 @Override
          142 protected void onCreate(Bundle savedInstanceState) {
          143 // TODO Auto-generated method stub
          144 super.onCreate(savedInstanceState);
          145
          146 setContentView(R.layout.c);
          147
          148 Button exit_c=(Button)findViewById(R.id.exit_c);
          149 exit_c.setOnClickListener(exitClick);
          150 ExitApplication.getInstance().addActivity(this);
          151
          152 }
          153
          154 OnClickListener exitClick=new OnClickListener() {
          155
          156 @Override
          157 public void onClick(View v) {
          158 // TODO Auto-generated method stub
          159 ExitApplication.getInstance().exit();
          160 //如果只是調(diào)用以下其中的一個(gè)方法,并不會(huì)完全退出應(yīng)用
          161 //android.os.Process.killProcess(android.os.Process.myPid());
          162 //System.exit(0);
          163 }
          164 };
          165
          166 }

          posted on 2013-04-10 09:05 姚先進(jìn) 閱讀(196) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
           
          主站蜘蛛池模板: 揭西县| 北流市| 肥乡县| 澎湖县| 和平县| 扶风县| 望城县| 玉溪市| 错那县| 黎城县| 美姑县| 邢台县| 柘荣县| 益阳市| 工布江达县| 皮山县| 富裕县| 四平市| 巴彦淖尔市| 龙州县| 华亭县| 临清市| 漳州市| 柳林县| 堆龙德庆县| 元氏县| 麦盖提县| 清水县| 南漳县| 莲花县| 东乡族自治县| 成都市| 荆门市| 扎囊县| 嵊州市| 资兴市| 汕头市| 和平区| 抚顺县| 马尔康县| 灵台县|