Как узнать, находится ли активность на вершине стека
Как я могу узнать, является ли активность вершиной стека? Я думал об использовании onResume / onPause, но это не совсем так, так как он потерпит неудачу, как только приложение перейдет в фоновый режим. Дело в том, что я отправляю широковещательный приемник, который получен для всех действий (у меня есть BaseActivity, который расширяется всеми действиями и который регистрируется в широковещании). Таким образом, только действие, которое находится на вершине стека, должно реагировать на трансляцию. Если я использую isResumed(), это будет работать всегда, но когда приложение переходит в фоновый режим. Любая идея?
Заранее спасибо!
1 ответ
in base activity you register the broadcast Receiver and in receiver function you call one abstract function which one is implemented by all child activities.
The activity which is on top will automatically receive that function call.
Edit sample code:
public abstract class BaseActivity extends AppCompatActivity {
private static final String NOTIFICATION_ARRIVED = "arrived";
public abstract void receivedFunction(Intent intent);
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
displayToast(" received in Base");
receivedFunction(intent);
}
};
public void displayToast(String s) {
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
}
@Override
public void onResume() {
super.onResume();
registerReceiver(mMessageReceiver, new IntentFilter(BaseActivity.NOTIFICATION_ARRIVED));
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(mMessageReceiver);
}
}
public class MainActivity extends BaseActivity {
@Override
public void receivedFunction(Intent intent) {
displayToast(" received in child");
}
// do whetever you want . if you ovveride onpause and onResume then call super as well
}
or any other child
public class MainActivity2 extends BaseActivity {
@Override
public void receivedFunction(Intent intent) {
displayToast(" received in child");
}
// do whetever you want . if you ovveride onpause and onResume then call super as well
}
// to broadcast
Intent intent = new Intent(BaseActivity.NOTIFICATION_ARRIVED);
sendBroadcast(intent);