[Android分享] 關閉正在啟動並執行應用(精華板)

來源:互聯網
上載者:User

轉自http://www.eoeandroid.com/forum.php?mod=viewthread&tid=158206 

原作者 Android-Sylar


看到很多關於應用退出的問題,今天在這裡為大家簡單總結一下,如果說的不對還望大家見諒。

方法一:System.exit(0)和android.os.Process.killProcess(android.os.Process.myPid()),我想很多人都嘗試過,當關閉多個Activity的時候這兩個方法根本不起作用,原因當然和Activity的堆棧管理有關。

方法二:restartPackage,這種方法會終止一切和這個程式包關聯的,所有共用同一uid的process被kill,所有   的activity會被removed所有建立的服務會停止,還會發一個廣播 Intent.ACTION_PACKAGE_RESTARTED。眾所周知這個方法已經過時,2.2就不起作用了。

  1.     ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);    
  2.     manager.restartPackage(getPackageName());
  3. <uses-permission android:name="android.permission.RESTART_PACKAGES"/> 

複製代碼


方法三:這個方法是2.2以後取代restartPackage的方法。但是google給的只是一個空殼,這個方法依然不起作用。

  1. activityManager.killBackgroundProcesses(packageName);
  2. <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> 

複製代碼

方法四:建立一個ActivityInstance單例模式來統一管理Activity的退出。這是一個很雞肋的方法,因為它確實有用,但又這麼寫又有點浪費。

具體做法就是寫一個ActivityInstance單例,在每一個activity啟動的時候都調用它的ActivityInstance.addActivity(this);方法,當退出應用時,調用ActivityInstance.exit();方法。

  1. public void exit(){
  2.                                for(Activity at:activityList){
  3.                  at.finish();
  4.       }
  5.     System.exit(0);
  6. }

複製代碼

方法五:發送廣播退出。在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後關閉。如果不閑麻煩可以這樣做,個人來講還沒有方法四好。
方法六:遞迴退出,在開啟新的Activity時使用startActivityForResult,然後自己加標誌,在onActivityResult中處理,遞迴關閉。
方法七:退出的時候跳回HOME,一種假的退出方法,但可以退出,該方法只是回到HOME頁而將本身應用虛假退出。

  1.     Intent startMain = new Intent(Intent.ACTION_MAIN); 
  2.                      startMain.addCategory(Intent.CATEGORY_HOME); 
  3.                      startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
  4.                      startActivity(startMain); 
  5.                      System.exit(0);

複製代碼

方法八: activityManager.forceStopPackage(PackageName);看到forceStop是不是感覺還挺熟悉的,我們系統設定裡面關閉應用就是調用的這個方法。這個方法可以完全關閉應用程式而且只要一個包名。
不過這個方法是系統隱藏的,我們寫應用的時候在ActivityManager裡是找不到這個方法的。這就涉及到了調用系統隱藏API的方法。下面是通過反射機制來擷取該方法。

  1. ActivityManager sd = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
  2. Method method= Class.forName("android.app.ActivityManager")
  3. .getMethod("forceStopPackage", String.class);

複製代碼

補充:其實Android有自己的記憶體管理機制並不需要我們完全退出本身應用,當使用者按退出鍵的時候使用者回到HOME或其他相關介面即可。在沒有特殊要求的時候虛假退出就可以。

相關文章

聯繫我們

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