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)
您应该创建一个 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)