具有延迟动作的处理程序帖子Runnable r

问题描述

因此,我正在尝试实现一项功能,使我的 sip 电话应用程序在收到呼叫后唤醒并发送注册到服务器,如果它处于睡眠状态,则会发送推送通知。我正在将 Linphone 库用于此类目的。

这是通过一个名为 dispatchOnUIThread(Runnable r) 的方法完成的,该方法应该使用其类中的处理程序并发布所述可运行的。 runnable 本身实现了在收到推送并确定注册是否处于活动状态后要采取的操作,如下所示:

关于 LinphoneUtils 类:

public final class LinphoneUtils {
private static final Handler sHandler = new Handler(Looper.getMainLooper());

  public static void dispatchOnUIThread(Runnable r) {
      sHandler.post(r);
  }
}

它是这样调用的:

public void onMessageReceived(RemoteMessage remoteMessage) {
  LinphoneUtils.dispatchOnUIThread(mPushReceivedRunnable);
}

以及 mPushReceivedRunnable 的实现:

private Runnable mPushReceivedRunnable =
        new Runnable() {
            @Override
            public void run() {
                if (!LinphoneContext.isReady()) {
                    new LinphoneContext(getApplicationContext());
                    LinphoneContext.instance().start(true);
                } else {
                    Log.i(TAG,"[Push Notification] Notifying Core");
                    if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null && LinphoneManager.getLc().getCallsNb() == 0) {
                        LinphoneCore core = LinphoneManager.getLc();
                        if (core != null) {
                            core.setNetworkReachable(true);
                            core.refreshRegisters();
                        }
                    }
                }
            }
        };

问题是,如果注册未激活,在推送通知之后的 dispatchOnUIThread 方法之后,应用程序不会向服务器发送注册,直到它收到第二次推送,在这种情况下,它会发送注册应该跟随第一次推送和发送第二次推送的呼叫邀请。

代码与 Linphone 本身的代码非常相似,但我不明白这种延迟操作的原因,谁能告诉它为什么会这样?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)