onServiceConnected()需要花费很多时间

时间:2018-07-16 08:36:43

标签: android android-activity android-service android-service-binding

我有一个活动和一个运行在不同线程中的服务。 这是一个晚上的录音机。

当记录中途由于任何原因导致服务崩溃(我们无法避免该崩溃,因为它来自外部库)时,就会出现问题。

作为解决方法,我要做的是在“活动”发现与服务的连接已丢失时重新启动活动。 通过重新创建活动,也可以重新创建服务。

问题在于,两次通话之间要花费很多时间(甚至1小时)

    bindService(RecorderService.newIntent(this), this, BIND_AUTO_CREATE);

和回调

public void onServiceConnected(ComponentName name, IBinder service) {

我认为发生这种情况是因为手机处于低电量模式,因为用户在深夜不使用手机。

连接完成后,我会调用startService,因为需要连接Activity和Service。

因此,问题在于该记录在该时间停止,并且我需要它在不中断的情况下运行。活动恢复后,我可以调用startService,但是这不能确保在再次出现虚假的崩溃时连接服务。

关于如何使服务的连接/启动速度更快的任何想法?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果问题仅在于夜间的“低功耗模式”,我认为您可以在启动服务或活动之前获取WakeLock(https://developer.android.com/reference/android/os/PowerManager.WakeLock)来唤醒CPU。完成操作后,别忘了释放锁;)

答案 1 :(得分:0)

我认为零售产品可能存在内存问题和/或限制。 只需创建代码,记录器每2小时就会停止,保存并开始记录一个新文件。并且应该解决问题。

至少您对android.os.PowerManager.WakeLock进行了排序

答案 2 :(得分:0)

我已经看到了与服务类似的问题,可能有很多原因导致服务停止,例如电池,资源等,我会先检查用于该服务的标志,例如,它应该为START_STICKY第一名,第二件事,我建议您考虑使用android中的AlaramManager,如果您希望某些内容始终在后台运行,这无疑会更加可靠。

以下一些有用的链接:

Service FlagsAlarmManager