2013-01-07 82 views
1

我正在開發一個像A,B,C,D這樣幾個視圖的Android應用程序。這裏D是我的家庭活動。我的導航就像A-> B-> C-> D。一旦我到達活動D,當我嘗試按下後退按鈕時,所有先前的活動(A,B,C)應該關閉。我無法開始完成稱爲新活動的活動。請爲我提供一種方法來殺死我的應用程序的活動。如何殺死我在android中的所有活動?

這裏我用了一些代碼來完成所有活動,但沒有得到結果。

ActivityManager manager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> list = manager.getRunningAppProcesses(); 

if(list != null) 
{ 
    for(int i=0;i<list.size();++i) { 
     if(getApplicationContext().getPackageName().matches(list.get(i).processName)) { 
      int pid = android.os.Process.getUidForName(getApplicationContext().getPackageName()); 
      android.os.Process.killProcess(pid); 
     } 
     else { 
      debug.log("app not killed"); 
     } 
    } 
} 

因此,請建議我適當的方式來關閉我所有的活動。

感謝advace

+0

如果用戶在活動B或C中,是否希望用戶能夠向後導航? – DeeV

+0

是的。我能夠給B&C之間的導航 –

回答

0

謝謝所有回答我的問題的人。最後,我得到了解決我的問題。我通過使用意圖Intent.FLAG_ACTIVITY_CLEAR_TOP解決了這個問題。這是我的場景的解釋。 假設我在活動四,我的實際流程是A-> B-> C-> D.我想殺死我以前的活動A,B,C。當我從活動D開始時,我曾經打電話給我的第一個活動A. 因此,我添加了意圖FLAG_ACTIVITY_CLEAR_TOP來調用活動A.因此,中間活動將被清除,並將只顯示活動A.並且我傳遞一些標誌值作爲意圖額外到活動A.這樣

Intent intent = new Intent(D.this,A.class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       intent.putExtra("finishstatus", true); 
       this.startActivity(intent); 
       this.finish(); 

和我檢查像

bundle = this.getIntent().getExtras(); 
     if(bundle!= null) 
     { 
      boolean isActivityToBeFinish = this.getIntent().getExtras().getBoolean("finishstatus"); 
      if(isActivityToBeFinish) 
      { 
       finish(); 
       } 
    } 

在活動A的onCreate方法捆值如果可用的狀態值,這是真的,那麼我整理的活動時,也。所以我的問題被清除了,我成功完成了以前的所有活動。

可能是我的解釋不好,但會完美的工作。

0

在Activity_D的onPause()設置一個標誌像public static boolean kill = true;

現在,在活動A,B,C的onResume()檢查,如果殺了,然後調用finish();

onResume() { 
    super.onResume(); 
    if(Activity_D.kill) { 
     finish(); 
    } 
} 
1

您可以通過兩種方式來實現:

  1. 當您從活動啓動B活性你可以這樣設置一個標誌意圖

    Intent i = new Intent(A.this, B.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(i); 
    

和選自B做同樣的C和從C到d

OR

  • 之後開始活動呼叫finish()
  • 這將開始活動B並完成活動A,所以當你點擊後你不會返回到A活動。

    Intent i= new Intent(A.this, B.class); 
        startActivity(i); 
        finish(); 
    
    0

    我的解決方法,以同樣的問題:

    聲明與活動堆棧單身,和一個公共靜態clearAll方法,迭代訪問堆棧,完成所有活動。

    然後,我聲明一個StackedActivity擴展活動,它將用於我的應用程序的所有活動。

    在StackedActivity的onCreate方法中,我將實例添加到堆棧單例中,當我想完成所有操作時,只需調用clearAll方法即可。

    3

    爲了完成它:

    Activity_name.this.finish(); 
    

    和查殺:

    android.os.Process.killProcess(android.os.Process.myPid()); 
    
    +0

    給那個人一個鐘聲! :D – marienke

    0

    對於全面完成應用

    我海外商品會有你是在啓動的活動,還是您的MainActivity從那裏你沒有按不想恢復您的申請

    1.完成您的活動 清單中的2.android:excludeFromRecents="true「

    +0

    非常有幫助先生...非常感謝。 –

    +0

    我有問題。你可能會回答相同的問題。 http://stackoverflow.com/questions/29735209/android-repeating-alam-is-not-getting-stopperd-on-the-stop-button-clicked –

    相關問題