在应用程序类中注册和取消注册BroadcastReceiver

Anb*_*nbu 15 java android application-lifecycle android-lifecycle

我有一个广播接收器,它在Android Applcation类的onCreate()方法中注册但是如何取消注册

public class MyApplication extends Application {


@Override
public void onCreate() {
    super.onCreate();
    registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我在应用程序onCreate()方法中注册了它,并且Application类中没有onDestroy()/ onStop()方法来取消注册broadcastReceiver.

如何实现它

Bri*_*cho 31

如果您想在应用程序运行的整个过程中收听,则无需取消注册.从文档(截至今天):

只要注册上下文有效,上下文注册的接收器就会接收广播.例如,如果您在"活动"上下文中注册,则只要活动未被销毁,您就会收到广播.如果您在应用程序上下文中注册,则只要应用程序正在运行,您就会收到广播.

(https://developer.android.com/guide/components/broadcasts.html)

  • 非常感谢您的文档参考...这应该是公认的答案。 (3认同)

Ngu*_*iếu 5

您应该创建一个 BaseActivity。

例子

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(broadcastReceiver);
}
}
Run Code Online (Sandbox Code Playgroud)

并且 MainActivity 扩展了 BaseActivity

例子:

public class MainActivity extends BaseActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
}
Run Code Online (Sandbox Code Playgroud)