2017-07-02 79 views
0

我在這裏陳述了一個新活動onReceive()這樣。如何關閉onReceive()中的活動

context.startActivity(new Intent(context, SecondActivity.class)); 

,但不能直接在的onReceive()關閉活動。

我有一個靜態變量,它存儲對新Activity的引用。

(上下文被分配在的onCreate活動的()

所以我打電話完成()的onReceive()這樣。

SecondActivity.context.finish(); 

但我不認爲這是一個好方法。有沒有更好的方法呢?

我知道我可以調用完成()直接的onReceive()如果我的廣播接收器是活動類中定義的,但問題是,它會關閉「這個」活動,但不在onReceive()中新創建的活動。當廣播接收機是靜態的而不是動態的時,也不能撥打完成()

回答

4

我在onReceive()中聲明瞭一個新的Activity,像這樣。

,一種強代碼味道,除非這是本地廣播(LocalBroadcastManager),在這種情況下,它是一種弱代碼味道。

我有一個靜態變量,它存儲對新Activity的引用。

這是一個強烈的代碼味道。

而且當廣播接收器是靜態的而不是動態的時候也不能調用finish()。

更改基於系統廣播的活動組合是另一種強烈的代碼異味。

有沒有更好的方法呢?

鑑於所有代碼的異味,我懷疑你的應用程序存在重大的架構問題。

也就是說,一般的做法是而不是有外界各方以這種方式控制活動。相反,您使用事件總線(LocalBroadcastManager,greenrobot的EventBus)來引發事件。活動如果存在的話,可以聽取這些事件並採取適當的行動,其中可能包括摧毀自己。或者,反應性溶液(RxJava/RxAndroid等))在這裏可能會有所幫助,在收到廣播時,您會做一些觸發活動註冊的觀察員的事情。

+0

感謝您的回答和建議! – Jenix