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 }
只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
|
||