[Android設計模式]Android退出應用程式終極方法

來源:互聯網
上載者:User

標籤:

如何乾淨徹底地退出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 <application2    android: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

 
 1 public class BaseActivity extends Activity{ 2     @Override 3     protected void onCreate(Bundle savedInstanceState){ 4         super.onCreate(savedInstanceState); 5         //添加Activity到堆棧 6         MyApplication.getInstance().addActivity(this); 7     } 8   9     @Override10     protected void onDestroy(){11         super.onDestroy();12         //結束Activity&從棧中移除該Activity13         MyApplication.getInstance().finishActivity(this);14     }15  16 }

 

後續的Activity 都整合這個BaseActivity就可以了。

Android的官方文檔中寫到”沒有必要自訂Application類”

There is normally no need to subclass Application.

但事實上,通過逆向工程國際大廠的Android應用,我發現各廠都自訂了Application類用以實現Global變數操作和Activity管理。所以我們也學習一下吧~(你也有興趣通過逆向工程來借鑒一下別人的Android應用?別急,後續的教程裡會陸續介紹的。)

以上的代碼只是基本的Activity管理方案,以此為架構,我們可以加入更多關於Acitivity的管理方法以及其他全域變數的操作。

歡迎訪問 http://www.mobiletuts.me 一個及時更新的Android開發教程網站

 

http://www.cnblogs.com/mainroadlee/archive/2013/10/18/how_to_exit_android_application.html

[Android設計模式]Android退出應用程式終極方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.