【问题标题】:Creating a Toast inside onReceive() method of a BroadcastReceiver在 BroadcastReceiver 的 onReceive() 方法中创建 Toast
【发布时间】:2013-01-24 08:28:40
【问题描述】:

您可能知道,BroadcastReceiver 类的 onReceive() 方法的文档说:

当它在主线程上运行时,你永远不应该执行长时间运行 其中的操作(系统超时 10 秒) 允许在考虑接收器被阻塞和候选者之前 被杀)。您无法在实施中启动弹出对话框 onReceive()。

我想在收到广播时向用户显示 Toast,但我不确定 Toast 是否被视为“弹出对话框”,或者只有 Dialog 类中的对象才是它们所指的对象。

我见过很多代码示例,其中在此函数中使用了 Toast,但我不确定这是否是不好的做法,或者它是否会对性能产生很大影响。

我想知道的是我是否应该在这个函数中创建一个 Toast,如果没有,我应该怎么做(扩展 Toast 然后使用一个意图来调用它?)。

【问题讨论】:

  • 只需将吐司放入 onReceive() 中,这样做不会有任何问题,而且这不是一个坏习惯。这取决于您需要与用户进行何种互动。

标签: android broadcastreceiver toast


【解决方案1】:

Toast 不被视为弹出对话框。它被认为是一种通知方法,类似于通知栏中的通知。许多应用程序在 BroadcastReceivers 中使用它,包括我自己的。迄今为止,我从未见过在任何设备上显示 Toast 会对性能产生影响。

您应该可以很好地显示来自 BroadcastReceiver 的 Toast。

【讨论】:

    【解决方案2】:

    BroadcastReceiver 使用Toast 是完全安全的。

    但请注意,如果在应用程序上下文之外显示 Toast 会被视为侵入性 - 如果从 BroadcastReceiver 使用可能会发生这种情况。

    为了获得更好的用户体验,请使用Notification

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多