-
殺死進程。 這種方法是沒有效果的只能殺死當前的
Activity
無法關閉程序,在1.5的時候有用,谷歌設計的時候規定程序不能自殺android.os.Process.killProcess(android.os.Process.myPid())
. -
終止當前正在運行的Java虛擬機,導致程序終止. 這種方法也是沒有效果的,因爲
Android
用的是dalvik
虛擬機System.exit(0);
-
強制關閉與該包有關聯的一切執行 這種方法只能殺死別人,無法殺死自己
java ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); manager.restartPackage(getPackageName()); 同時需要申請權限 <uses-permission android:name="android.permission.RESTART_PACKAGES" />
既然上面介紹的三種方法都沒有效果,那麼怎麼才能退出應用程序呢?
就是自定義一個Application
,在該Application
中去定義一個List<Activity>
的集合來記錄中每一個開啓的Activity
,在退出的時候去遍歷這個List<Activity>
集合,然後挨個的進行mActivity.finish()
方法,這要求在每開啓一個Activity
的時候都加入到List
集合中,並且在Activity
退出的時候從List
集合中將其移除。
```java public class Activity01 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyApp myApp = (MyApp) getApplication();
myApp.activies.add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
MyApp myApp = (MyApp) getApplication();
myApp.activies.remove(this);
}
public void click1(View view){
Intent intent = new Intent(this,Activity01.class);
startActivity(intent);
}
public void click2(View view){
Intent intent = new Intent(this,Activity02.class);
startActivity(intent);
}
public void exit(View view){
MyApp myApp = (MyApp) getApplication();
for(Activity ac : myApp.activies){
ac.finish();
}
}
}
public class Activity02 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
MyApp myApp = (MyApp) getApplication();
myApp.activies.add(this);
}
public void click1(View view) {
Intent intent = new Intent(this, Activity01.class);
startActivity(intent);
}
public void click2(View view) {
Intent intent = new Intent(this, Activity02.class);
startActivity(intent);
}
public void exit(View view) {
MyApp myApp = (MyApp) getApplication();
for (Activity ac : myApp.activies) {
ac.finish();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
MyApp myApp = (MyApp) getApplication();
myApp.activies.remove(this);
}
}
public class MyApp extends Application { //存放當前應用程序裏面打開的所有的activity public List activies; @Override public void onCreate() { activies = new ArrayList(); super.onCreate(); } }