为了通知用户我使用AlertDialog或Snanckbar。它们都需要一个Activity上下文才能显示。三个案例:
从结束活动产生的消息,例如活动主开始活动选择器,用户选择一个选项,代码做一些事情,然后回到主人
// Selector activity draft sample
mButtonSeelcted.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
super.onClick(view);
doMagicForSelected();
mContext.sendBroadcast(intentForUserMessage);
mContext.startActivity(intentToMasterActivity);
}
});
现在不显示消息,因为在接收器启动时,选择器活动已完成。另外,它提供了一个WindowLeaked异常,因为AlertDialog永远不会被解雇。
有什么想法?我缺少一种模式吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
我正在实现广播/接收器模式,因此线程可以广播消息,活动接收并显示消息
请使用进程内消息总线(例如LocalBroadcastManager
,greenrobot的EventBus)。使用系统广播不仅浪费CPU和电池,而且还会引入安全问题(例如,任何应用都可以监视您的消息)。
我缺少一种模式吗?
在您的第三个场景中,它是"主要活动的责任"显示此信息,而不是正在销毁的活动。因此,请将您传递给Intent
的{{1}}信息添加到startActivity()
,告知"主要活动"显示该信息。