標籤:
會做出這個demo,主要原因在於下班後看到群裡都在談論這個問題,一下子興趣由起,下班了吃完飯繼續加班搞個demo來試試。廢話不多說了,以前寫上學作文也這樣,先搞個長長的開頭湊字數
當然,說到完美APP退出,我以前經常用的方法就是使用List來儲存每個Activity,然後要退出的時候,就是要關掉所有的Activity,直接調用finishAll就行啦,其實就是一個ActivityManager的管理器而已。但是。。。但是。。。今天在群裡有人問了這個問題,群主竟然說用這種方法來退出應用的別說是我群裡的人。瞬間覺得自己low了很多,麻痹我不是這麼low的人啊,躺著也中槍啊,我畢設都是這麼做的啊!!!於是,興(一)趣(氣)一(之)來(下)搞起了demo來,查了網上的資料,貌似有兩種比較能接受,且還算完美實現退出的方法。下面就具體的講下實現的方法吧.。
一。發送廣播退出(好像很多人都知道)
這種退出方式很早就有所耳聞,但沒去嘗試,今天就網上搜了下,實現了,確實可以,比較推薦。
具體代碼是這樣的,先建一個Activity的基類,作為來放Broadcast的地方,這樣其他Activity只要繼承此基類就行了,不用每次都要重寫一遍註冊和登出廣播。
代碼如下:
public class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);IntentFilter filter = new IntentFilter();filter.addAction("com.jrue.exitApp");registerReceiver(mExitReceiver, filter);}private BroadcastReceiver mExitReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if ("com.jrue.exitApp".equals(intent.getAction())) {context.unregisterReceiver(this);finish();}}};}
在退出的時候只要去發送這個廣播就行啦:
case R.id.exit_use_broadcast:Intent intent = new Intent("com.jrue.exitApp");getApplicationContext().sendBroadcast(intent); break;
好!完美運行,這個方法可以。
二。切換到後台,最後finish掉(其實不知道怎麼命名啦)
原來大概是這樣的,不知道會不會理解錯。就是通過setFlags將其改變為 Intent.FLAG_ACTIVITY_CLEAR_TOP 狀態,而這個狀態具體怎麼講呢,就是進入的Activity若在棧中已經存在的時候,則將此Activity之上的其他Activity移除棧,以達到將目標Activity移至棧頂的目的。然後setAction的 Intent.ACTION_MAIN 找到程式的第一個Activity,也就是程式第一次開啟出現的Activity,很有可能就是棧底的Activity,所以我們這樣做的目的就很簡單啦。
總結一下:就是故意放進去一個應用開啟第一個開啟的activity,然後改變Flags,讓第一個Activity之上的Activity出棧,使第一個Activity順利達到棧頂,然後直接finish(),因為棧中也就只有一個Activity了,finish就是關閉應用了。太騷了這方法。
代碼如下:
Intent intent2 = new Intent(Intent.ACTION_MAIN); intent2.addCategory(Intent.CATEGORY_HOME); intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent2); // android.os.Process.killProcess(android.os.Process.myPid()); finish();
好啦。也就這樣了,demo的也會奉上,有用最好了,沒用可以無視之無視之~~~小弟不才啊!
demo下載
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
APP應用完美退出的方法的嘗試