销毁后调用活动方法

Posted

技术标签:

【中文标题】销毁后调用活动方法【英文标题】:call activity method after destroy 【发布时间】:2017-07-17 05:31:50 【问题描述】:

我正在使用 FCM 来获取消息,并使用接收器将消息广播到我的接收器

接收方代码:

 public class MessageReceiver extends BroadcastReceiver 

    private FCMInterface listener;

    public MessageReceiver(FCMInterface listener)

        this.listener = listener;
    

    @Override
    public void onReceive(Context context, Intent intent) 

    
   

我正在使用接口将接收器连接到活动(活动实现 FCMInterface)

问题是如果活动 onDestroy 调用然后我调用我的接口的函数会发生什么?

【问题讨论】:

您需要检查 activity.isFinishing() 的真假以进行安全编码 @RasoulMiri 我想知道方法是否会调用 很方便,只需要放一个Log.i("==","isCall");在函数中,看看它是否被打印了 【参考方案1】:

即使在 onDestroy() 方法被调用之后,类中实现的方法也会被调用。

但您无法再访问活动上下文或与 UI 相关的任何内容。

在设置广播接收器时,您应该在 start() 和 stop() 生命周期回调中注册和取消注册。不这样做会导致内存泄漏异常。

在良好的 android 编程实践中,您通常会尽量避免在调用 onDestroy() 后持有与活动上下文相关的对象引用的情况。

【讨论】:

所以我可以在我的界面中放置一个方法来检查活动是否正在运行,是吗? 是的,在接口方法中使用isFinishing()【参考方案2】:

我认为你应该向你的活动发送意图(如果你需要,设置你的活动 singleTop 或 singleTask 或 SingleIntance )而不是接口。

【讨论】:

我必须使用 startActivity() 向活动发送意图,但如果活动打开,我想更新活动,否则显示通知或什么都不显示

以上是关于销毁后调用活动方法的主要内容,如果未能解决你的问题,请参考以下文章

活动被销毁后,savedInstanceState 始终为空

销毁一个活动

在活动被销毁后运行Bindservice

在会话自动销毁之前调用自定义方法

在Android中销毁布局时覆盖的方法

如果 Activity 被销毁,我可以从 Activity 调用静态方法吗?