Android 應用程式的隱藏與退出

來源:互聯網
上載者:User

 

實現按Home鍵時隱藏程式的效果:

1:Android 2.0之前需要監聽按鍵事件,進行判斷是不是按下了back鍵

2:Android 2.0之後系統提供了一個onBackPressed方法,這個方法就是專門用來監聽back鍵事件的,所以只需重寫onBackPressed方法即可

@Override

public void onBackPressed {

//實現Home鍵效果

//super.onBackPressed;這句話一定要注掉,不然又去調用預設的back處理方式了

Intent i="" new Intent(Intent.ACTION_MAIN);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

i.addCategory(Intent.CATEGORY_HOME);

startActivity(i);

退出應用程式的實現:可以自己寫個方法,例如:

public void exitProgrames{

Intent startMain = new Intent(Intent.ACTION_MAIN);

startMain.addCategory(Intent.CATEGORY_HOME);

startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(startMain);

android.os.Process.killProcess(android.os.Process.myPid);    //    這裡也可以用finsh() 只是killProcess殺進程比finsh()更徹底些,finsh()是通過調用Activity的 destoyt()方法來退出! 

還有一種比較流行的Android經典完美退出方法,使用單例模式建立一個Activity管理對象,該對象中有一個Activity容器(具體實現自己處理,使用LinkedList等)專門負責儲存新開啟的每一個Activity,並且容易理解、易於操作,非常不錯!
MyApplication類(儲存每一個Activity,並實現關閉所有Activity的操作)
public class MyApplication extends Application {

private List<Activity> activityList = new LinkedList<Activity>();
private static MyApplication instance;

            private MyApplication()
            {
            }
             //單例模式中擷取唯一的MyApplication執行個體
             public static MyApplication getInstance()
             {
                            if(null == instance)
                          {
                             instance = new MyApplication();
                          }
                 return instance;            
             }
             //添加Activity到容器中
             public void addActivity(Activity activity)
             {
                            activityList.add(activity);
             }
             //遍曆所有Activity並finish
             public void exit()
             {
                          for(Activity activity:activityList)
                         {
                           activity.finish();
                         }
                           System.exit(0);
            }
}
在每一個Activity中的onCreate方法裡添加該Activity到MyApplication對象執行個體容器中
MyApplication.getInstance().addActivity(this);
在需要結束所有Activity的時候調用exit方法
MyApplication.getInstance().exit();

 

我對其他一些退出方法進行的一點介紹和點評(不到之處還請指正):
@restartPackage(getPackageName())  (具體就不介紹了)
我在SDK2.1版本下開發的一款小軟體,放到Android2.2或2.3作業系統上無法退出,因為restartPackage方法在SDK2.1以後版本已經被廢棄不用了,理由是因為它不安全,可能關閉同其他應用程式共用的Service,而這個Service別人還要用呢,你給別人關了就不對了。

@有人說的終極退出方法:
           Intent startMain = new Intent(Intent.ACTION_MAIN);
           startMain.addCategory(Intent.CATEGORY_HOME);
           startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           startActivity(startMain);
           System.exit(0);
實際上這種方法只是返回了Home頁面,如果你再次進入應用,你會發現進入的首介面是你先前沒有關閉的Activity。

@ 有人說調用 android.os.Process.killProcess(android.os.Process.myPid());或者System.exit(0)   其實也都是只是退出了當前的activity!

@調用系統隱藏forceStopPackage方法,這裡是通過映射調用(也有其他方法)
        Method method = null;
        ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        try {
         method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);
         method.invoke(manager,getPackageName());
        } catch (Exception e) {
         Log.d("force",e.getMessage());   
        }
我在SDK2.2和2.3的測試結果是,出現NULLPointerException,彈出錯誤視窗,程式被迫關閉,和預想的正常退出有差別。不過我們可以通過修改基類實現自己的Thread.UncaughtExceptionHandler介面的uncaughtException方法,這樣就不會有錯誤視窗彈出。程式完全退出。

@和上面一樣,不過這是故意製造異常退出(上邊是無意製造的異常),但我認為這畢竟是下策。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.