用户通知需要上下文
User notification needs context
为了通知用户,我使用了 AlertDialog 或 Snanckbar。它们都需要 Activity 上下文才能显示。三种情况:
- 从当前 activity 产生的消息:那是微不足道的
- 从另一个线程产生的消息:我正在实现一个 broadcast/receiver 模式,因此线程可以广播消息,activity 接收并显示消息
消息从关闭 activity 产生,例如 activity Master start activity Selector,用户选择一个选项,代码做一些事情然后去回到大师
// Selector activity draft sample
mButtonSeelcted.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
super.onClick(view);
doMagicForSelected();
mContext.sendBroadcast(intentForUserMessage);
mContext.startActivity(intentToMasterActivity);
}
});
现在没有显示消息,因为当接收器启动时,选择器 activity 已完成。另外,它给出了一个 WindowLeaked 异常,因为永远不会关闭 AlertDialog。
有什么想法吗?有没有我遗漏的模式?
- 启动 Selector activity (activity B) from Master activity (activity A) 使用 startActivityForResult().
- 根据结果显示来自Masteractivity的对话框。
I am implementing a broadcast/receiver pattern so the thread can broadcast the message and the activity receives and shows the message
请使用进程内消息总线(例如,LocalBroadcastManager
,greenrobot 的 EventBus)。使用系统广播不仅会浪费 CPU 和电池,还会带来安全问题(例如,任何应用程序都可以监视您的消息)。
Is there a pattern I am missing?
在您的第三种情况下,"master activity" 有责任显示此信息,而不是被销毁的 activity。因此,将信息添加到您传递给 startActivity()
的 Intent
,告诉 "master activity" 显示该信息。
为了通知用户,我使用了 AlertDialog 或 Snanckbar。它们都需要 Activity 上下文才能显示。三种情况:
- 从当前 activity 产生的消息:那是微不足道的
- 从另一个线程产生的消息:我正在实现一个 broadcast/receiver 模式,因此线程可以广播消息,activity 接收并显示消息
消息从关闭 activity 产生,例如 activity Master start activity Selector,用户选择一个选项,代码做一些事情然后去回到大师
// Selector activity draft sample mButtonSeelcted.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { super.onClick(view); doMagicForSelected(); mContext.sendBroadcast(intentForUserMessage); mContext.startActivity(intentToMasterActivity); } });
现在没有显示消息,因为当接收器启动时,选择器 activity 已完成。另外,它给出了一个 WindowLeaked 异常,因为永远不会关闭 AlertDialog。
有什么想法吗?有没有我遗漏的模式?
- 启动 Selector activity (activity B) from Master activity (activity A) 使用 startActivityForResult().
- 根据结果显示来自Masteractivity的对话框。
I am implementing a broadcast/receiver pattern so the thread can broadcast the message and the activity receives and shows the message
请使用进程内消息总线(例如,LocalBroadcastManager
,greenrobot 的 EventBus)。使用系统广播不仅会浪费 CPU 和电池,还会带来安全问题(例如,任何应用程序都可以监视您的消息)。
Is there a pattern I am missing?
在您的第三种情况下,"master activity" 有责任显示此信息,而不是被销毁的 activity。因此,将信息添加到您传递给 startActivity()
的 Intent
,告诉 "master activity" 显示该信息。