У меня была проблема с шиной событий и я пробовал много способов.
Я использую сервис для планирования своего приложения, я буду публиковать события в Eventbus в App.Activity каждый раз.
RefreshService. java
Runnable run = new Runnable() {
@Override
public void run() {
if (instanceNetwork.isOnline(RefreshService.this)) {
Log.d("LOG_SERVICE_POST", "run: ");
EventBus.getDefault().postSticky(RUNNING);
}
mHandler.postDelayed(this::run, timeRefresh);
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (timeRefresh == null) {
timeRefresh = instanceSharedPreferences.getTimeRefresh(Setting.KEY_AUTO_REFRESH, getString(R.string.TIME_REFRESH_DEFAULT));
}
mHandler.postDelayed(run, timeRefresh);
return super.onStartCommand(intent, flags, startId);
}
Приложение активности
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app);
Intent intent = new Intent(this, RefreshService.class);
startService(intent);
}
@Override
protected void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Override
protected void onDestroy() {
if(EventBus.getDefault().isRegistered(this)){
EventBus.getDefault().unregister(this);
}
AppDatabase.destroyInstance();
super.onDestroy();
}
@Subscribe(sticky = true, threadMode = ThreadMode.BACKGROUND)
public void onMessageEvent(Boolean isRun) {
if (isRun == RefreshService.RUNNING) {
Log.d("LOG_REFRESHED", "onMessageEvent: ");
runnableRefresh.run();
}
}
В настоящее время служба и Eventbus может работать нормально, но когда приложение выключено, будет запущена только служба (подписка не получает событие).
Я хочу, чтобы подписка могла получать мое событие, даже когда приложение выкл.