我使用带有BroadcastReceiver的导航UI收到警告。但是,一切正常,这只是一个警告,但恐怕最终会导致某些错误或崩溃。 这是发生的流程:
我使用AlarmManager设置了警报。通知意图是一个BroadcastReceiver。
broadcastReceiver onReceive对DB进行了异步调用:
@Override
public void onReceive(Context context, Intent intent) {
setSharedPreferences(context);
final PendingResult pendingResult = goAsync();
fetchDataFromDB(context, pendingResult);
}
fetchDataFromDB使用RxJava:
appDatabase.dataDao().getData(id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> onNext(data, context.getApplicationContext(), pendingResult),
throwable -> onError(throwable, pendingResult)
);
我想使用JobService,但它适用于API> 21,并且该调用实际上并不需要很长时间,因此我只是将goAsync与RxJava一起使用。
onNext基本上会创建一个具有待定意图的通知:
Intent notificationIntent = new Intent(context.getApplicationContext(), NotificationActivity.class);
pendingIntent = PendingIntent.getActivity(context.getApplicationContext(), Constants.NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
到目前为止,一切都很好,我收到了通知,当我点击通知以打开NotificationActivity时,我得到了警告:
W / ActivityThread:handleWindowVisibility:令牌android.os.BinderProxy没有活动
NotificationActivity(通知活动),应根据通知的待定意图打开,可以正确打开,没有错误或崩溃。
作为一个额外的信息,该NotificationActivity是除主Activity外唯一的“额外”活动,因为我正在使用单一活动方法进行导航。由于NotificationActivity不是正常流程的一部分,因此这是清单上的配置:
“ android:launchMode =” singleInstance“
不确定这是否也是原因。