Android ApplcationクラスのonCreate()メソッドに登録されているブロードキャストレシーバーがありますが、登録を解除する方法
例
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
上記のコードでは、アプリケーションのonCreate()メソッドに登録しており、broadcastReceiverの登録を解除するApplicationクラスにonDestroy()/ onStop()メソッドはありません。
それを達成する方法
アプリの実行中ずっとリッスンする場合は、登録を解除する必要はありません。ドキュメントから(今日現在):
コンテキスト登録された受信機は、登録コンテキストが有効である限り、ブロードキャストを受信します。たとえば、アクティビティコンテキスト内で登録すると、アクティビティが破棄されない限り、ブロードキャストを受信します。アプリケーションコンテキストに登録すると、アプリが実行されている限り、ブロードキャストを受信します。
( 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);
}
}
MainActivityはBaseActivityを拡張します
例:
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Applicationクラス内でunregisterレシーバーを呼び出すことができます。このように呼び出すだけです。
onDesctroy()メソッド呼び出し内のMainActivity内
@Override
protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).unregisterReceiver();
}
myApplicationクラスにnregisterReceiver()メソッドを作成します
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
public void unregisterReceiver() {
unregisterReceiver(broadcastReceiver);
}