如何幹淨徹底地退出Android應用程序,是很多開發者的心頭癢。如何幹淨地關閉所有已打開的Activity? 如何關閉指定的Activity? 如何關閉一類Activity? 這裏,我們提出一種通過實現對Application的擴展,實現了一種高效管理Activity,實現Android乾淨徹底地退出應用程序。
首先,我們將管理Activity的功能通過一個擴展的Application類來實現。
public class MyApplication extends Application {
private static Stack<Activity> activityStack;
private static MyApplication singleton;
@Override
public void onCreate()
{
super.onCreate();
singleton=this;
}
// Returns the application instance
public static MyApplication getInstance() {
return singleton;
}
/**
* add Activity 添加Activity到棧
*/
public void addActivity(Activity activity){
if(activityStack ==null){
activityStack =new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* get current Activity 獲取當前Activity(棧中最後一個壓入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 結束當前Activity(棧中最後一個壓入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 結束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 結束指定類名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 結束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出應用程序
*/
public void AppExit() {
try {
finishAllActivity();
} catch (Exception e) {
}
}
}
注意,爲了在我們自己的應用程序中使用這個自定義的Application類,而不是默認的Application類。需要在Manifest文件中修改一下<Application>的屬性( android:name)
例如:
1<application2android:icon="@drawable/icon"3 android:label="@string/app_name"4 android:name="your_package_name_here.MyApplication">
使用方法:
方法1: 之後我們在所有的activity的oncreate方法中通過getinstance得到一個MyApplication的實例,然後調用addActivity方法把當前的activity加入到stack中,如果要退出應用程序只需要調用AppExit方法即可。
方法2: 自定義一個繼承Activity類的BaseActivity
public class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//添加Activity到堆棧
MyApplication.getInstance().addActivity(this);
}
@Override
protected void onDestroy(){
super.onDestroy();
//結束Activity&從棧中移除該Activity
MyApplication.getInstance().finishActivity(this);
}
}
後續的Activity 都集成這個BaseActivity就可以了。
Android的官方文檔中寫到”沒有必要自定義Application類”
There is normally no need to subclass Application.
但事實上,通過逆向工程國際大廠的Android應用,我發現各廠都自定義了Application類用以實現Global變量操作和Activity管理。所以我們也學習一下吧~(你也有興趣通過逆向工程來借鑑一下別人的Android應用?別急,後續的教程裏會陸續介紹的。)
以上的代碼只是基本的Activity管理方案,以此爲框架,我們可以加入更多關於Acitivity的管理方法以及其他全局變量的操作。
歡迎訪問 http://www.mobiletuts.me 一個及時更新的Android開發教程網站