为了通知用户,我使用了 AlertDialog 或 Snanckbar。它们都需要一个 Activity 上下文才能显示。三种情况:
- 当前 Activity 产生的消息:这很简单
- 从另一个线程产生的消息:我正在实现一个广播/接收器模式,这样线程可以广播消息, Activity 接收并显示消息
关闭 Activity 产生的消息,例如 Activity Master 启动 Activity 选择器,用户选择一个选项,代码执行一些操作然后返回到 Master
// Selector activity draft sample mButtonSeelcted.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { super.onClick(view); doMagicForSelected(); mContext.sendBroadcast(intentForUserMessage); mContext.startActivity(intentToMasterActivity); } });
现在没有显示消息,因为当接收器启动时,Selector Activity 已完成。此外,它会给出一个 WindowLeaked 异常,因为 AlertDialog 永远不会被关闭。
有什么想法吗?有没有我缺少的模式?
最佳答案
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?
在您的第三种情况下,“主 Activity ”负责显示此信息,而不是被销毁的 Activity 。因此,将信息添加到您传递给 startActivity()
的 Intent
中,告诉“主 Activity ”显示该信息。
关于android - 用户通知需要上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43373354/