从服务启动活动

Posted

技术标签:

【中文标题】从服务启动活动【英文标题】:Starting Activity from Service 【发布时间】:2020-10-29 22:27:58 【问题描述】:

android 10 中从后台启动活动受到限制。我正在开发 Voip 通话应用程序。所以由于这个限制,我已经通过挂起的意图从服务启动了活动。每当用户点击提醒通知中的答案时,我都会将他们引导至特定活动。

我的问题是,点击通知中的回答操作后,活动没有快速启动。首先是一个白屏,然后是加载活动。因此,A 人和 B 的通话时间不同。在延迟后加载呼叫活动也不是一件好事。

在whatsapp中,一旦我点击接听,立即启动活动,同时通话时间也开始。所以它真的很好。我在 whatsapp 中加载活动和通话时长计时器没有遇到任何延迟。

如何在我的应用中实现这样的目标。 请任何人帮助我。

我已经在版本 10 和 8 的两个不同设备中测试了从 Notification 接听来电。 下面是接听来电的过程。(我用的是Pjsip库)

    点击接听时,立即设置状态 PJSIP_SC_OK。 (发送 200 OK) 其他人将回复 200 OK 响应。 之后,调用状态将被更改并捕获,然后发送到其他类进行处理。 使用处理程序将所需消息传递给 Activity。 收到消息的Activity会按照这个处理。 如果活动收到通话确认消息,则仅设置通话连接状态屏幕,然后启动计时器....

在上述第一步之后,在通话连接屏幕中启动计时器所需的时间是 1.xx 秒(Android 10)和 2 秒(Android 8)。

在 Activity 的 onCreate 中,我在显示布局之前正在做以下工作,

    设置视图可见性、设置图像以及使用位图调整图像大小。 测试时发现在 Oreo 版本中处理 Activity 的 Oncreate 需要 0.65 秒,而在 Q 版本中只需要 0.27 秒。 不仅是奥利奥,还有一些旧版本。

这就是为什么我得到时差...我该怎么办??

一旦用户在通知中点击接听,我需要立即显示通话连接屏幕,并且不会出现白屏。 Whatsapp 能够实现 dat。那么如何在我的 voip 通话应用程序中实现这一点呢?

【问题讨论】:

请提供一些您尝试过的代码,以便社区可以帮助您。 @Piyush 肯定会通过添加代码来更新帖子 很可能,您的问题出在活动上,而不是通知上。分析您的活动并确定显示时间的位置。 @CommonsWare 你是对的。我检查了我的代码。在启动活动一秒钟之前,我得到了一个白屏。之后只有我的通话连接屏幕出现....我不知道如何克服这一点 实际上正如@CommonsWare 所说,这是您活动的启动问题。您应该分析以找出问题所在。使用android:windowDisablePreview 可以消除白屏,但肯定不能解决主要问题。我认为另一种立即显示窗口的方法是使用全屏浮动窗口,看起来像一个活动。 【参考方案1】:

如果没有源代码,就很难提出任何建议或尝试解决问题。可能会使用捆绑包创建待处理的意图并利用广播接收器通过自定义广播来处理事件?

【讨论】:

【参考方案2】:

可能是因为你在 onCreate 中做了太多的工作,它会延迟渲染视图。将部分代码从 onCreate 中移出,看看它是否可以加快速度。

【讨论】:

以上是关于从服务启动活动的主要内容,如果未能解决你的问题,请参考以下文章

如何在android Q os中从后台服务启动活动,而不从开发人员选项的设置中单击“允许后台活动启动”?

无法从服务启动活动

从无障碍服务启动活动不适用于小米

如何检测哪个活动导致服务在 Android 中启动?

为啥挂起的意图在从服务的通知中调用时不会启动活动

无法从我的服务类(Android Lollipop)启动设备管理员活动