用户通知需要上下文

时间:2017-04-12 15:08:50

标签: android android-context

为了通知用户我使用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永远不会被解雇。

有什么想法?我缺少一种模式吗?

2 个答案:

答案 0 :(得分:1)

  1. 使用startActivityForResult()从活动(活动A)开始选择器活动(活动B)。
  2. 根据结果显示活动的对话框。

答案 1 :(得分:1)

  

我正在实现广播/接收器模式,因此线程可以广播消息,活动接收并显示消息

请使用进程内消息总线(例如LocalBroadcastManager,greenrobot的EventBus)。使用系统广播不仅浪费CPU和电池,而且还会引入安全问题(例如,任何应用都可以监视您的消息)。

  

我缺少一种模式吗?

在您的第三个场景中,它是"主要活动的责任"显示此信息,而不是正在销毁的活动。因此,请将您传递给Intent的{​​{1}}信息添加到startActivity(),告知"主要活动"显示该信息。