2016-03-07 47 views
-1

我有一個類(不是活動),有一堆活動在後臺。有時候,我想關閉堆棧中的舊活動,但大部分時間活動都是在後臺進行的,如果我使用finish(),則不起作用。發送國旗完成任何其他職業活動

所以,我想使用putExtra發送消息到該活動,因此它可以關閉onResume()

我試圖做這種方式沒有成功:

在我NoActivity.class:

public void removeActivityFromStack(Activity activity){ 
    for(int i = mActivityStack.size(); i>0; i--){ 
     if(mActivityStack.get(i - 1).equals(activity)){ 
      mActivityStack.remove(i-1); 
      activity.getIntent().putExtra(CLOSE_ACTIVITY, true); 
     } 
    } 
} 

而且在MyActivity的.class:

@Override 
protected void onResume() { 
    super.onResume(); 
    Bundle bundle = getIntent().getExtras(); 
    if(bundle != null && bundle.getBoolean(getString(R.string.bundle_cerrar_activity), false)){ 
     this.finish(); 
    } 
} 

任何幫助將不勝感激。


我也嘗試使用BroadcastReceiver關閉這些活動,但它仍然不起作用。我試了下道:

在我NoActivity.class

public void removeActivityFromStack(Activity activity){ 
     for(int i = mActivityStack.size(); i>0; i--){ 
      if(mActivityStack.get(i - 1).equals(activity)){ 
       IntentFilter filter = new IntentFilter(); 
       CloseActivitiesBroadcastReceiver baseActivityReceiver = new CloseActivitiesBroadcastReceiver(); 
       filter.addAction(CLOSE_ACTIVITY); 
       current.registerReceiver(baseActivityReceiver, filter); 
       current.sendBroadcast(new Intent(CLOSE_ACTIVITY)); 
       mActivityStack.remove(i-1); 
      } 
     } 
    } 

而且在CloseActivitiesBroadcastReceiver.java:

public class CloseActivitiesBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(context.getString(R.string.bundle_cerrar_activity))) { 
      ((Activity)context).finish(); 
     } 
    } 
} 
+0

你解決它? –

+0

@ Ragu Swaminathan nope,不幸與BroadcasterReceiver不一樣。只是一個骯髒的方式。我可以把我的方式作爲答案,而沒有人給我一個更好的解決方案 –

+0

你面臨的確切問題是什麼 –

回答

0

好吧,這是一個有點髒的答案,但是是唯一的一個,我可以做的工作。如果有人得到更好的答案,請發佈。

在我NoActivity.class:

public void removeActivityFromStack(Activity activity){ 
    for(int i = 0; i<mActivityStack.size(); i++){ 
     if(mActivityStack.get(i).equals(activity)){ 
      activity.finish() 
      mActivityStack.remove(i); 
     } 
    } 
} 

這樣,如果該活動是在前臺,將關閉在finish()。否則,它將不會關閉。但是,對於這種情況:

在MyActivity.class:

@Override 
    protected void onResume() { 
     super.onResume(); 
     if(!mNoActivityInstance.getActivityStack().contains(this)){ 
      finish(); 
     } 
    } 

在我的情況下,NoActivity.class可以作爲一個Singleton

0

嘗試使用廣播接收器在您的活動來完成, 1)註冊活動來聽完成事件。 2)發送該活動將收到的廣播,它將自行完成。

希望這將有助於解決您的問題。

感謝

+0

,謝謝您的回答。你能解釋我怎麼能這樣做? –