簡體   English   中英

如何在onReceive()中關閉活動

[英]How to close an Activity in onReceive()

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

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

但是不能直接在onReceive()中關閉活動。

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

(上下文是在Activity的onCreate()中分配的)

所以我這樣在onReceive()中調用finish()

SecondActivity.context.finish();

但是我認為這不是一個好方法。 有更好的方法嗎?

我知道如果我的BroadcastReceiver是在Activity類中定義的,那么我可以直接在onReceive ()中直接調用finish() ,但是問題是,它將關閉“ this”活動,而不是onReceive()中新創建的Activity。 並且,當廣播接收器是靜態的而不是動態的時,也不能調用finish()

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

除非是本地廣播( LocalBroadcastManager ),否則這是強烈的代碼氣味,在這種情況下,它是較弱的代碼氣味。

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

那是強烈的代碼氣味。

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

根據系統廣播更改活動混合是另一個強烈的代碼味道。

有更好的方法嗎?

考慮到所有代碼的味道,我懷疑您的應用程序存在嚴重的體系結構問題。

話雖如此,一般的做法是不要讓外部方以這種方式控制活動。 而是使用事件總線( LocalBroadcastManager ,greenrobot的EventBus)引發事件。 該活動(如果存在)可以偵聽這些事件並采取適當的措施,包括破壞自身。 或者,反應式解決方案(RxJava / RxAndroid等)在這里可能會有所幫助,在接收廣播時,您會執行一些觸發該活動注冊的觀察者的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM