偶尔开始一项活动的10秒延迟

时间:2015-03-26 22:01:25

标签: android android-activity wear-os

我有一个可穿戴的应用程序,其中WearMessageListenerService的onMessageReceived()启动一个活动,一切都按预期运行。

但是我观察到,偶然会在调用startActivity()和调用onCreate()的活动之间有大的延迟,大约10秒左右。

在我的代码中没有任何复杂性可能导致这种情况 - 它是一个非常非常简单和小的程序,我只有这两个类 - 监听器服务和活动。没有线程,没有后台处理,没有同步调用,没有阻塞,没有类似的东西。

以下是WearableListenerService的一些代码:

public void onMessageReceived(MessageEvent messageEvent)
{
    Log.i(TAG, "WearableListenerService onMessageReceived() with: " + messageEvent.getPath());
    Intent = ....
    ....
    Log.i(TAG, "Going to start activity");
    startActivity(intent); 

并且活动是关于创造的:

protected void onCreate(Bundle savedInstanceState)
{
    Log.i(TAG, "***************** ACTIVITY onCreate() ******************");
    ...

当我发现延迟发生时,我可以看到这样的日志(缩写为简洁)

03-25 12:57:35.565   WearableListenerService onMessageReceived() with:  CALL_STATE_RINGING
03-25 12:57:35.565   Going to start activity 
03-25 12:57:43.576   WearMessageListenerService onDestroy()
03-25 12:57:45.348   *************** ACTIVITY onCreate() **************

注意在创建活动之前,此日志中有8秒的间隙。

是否有人观察到此类延迟与一般活动有关,或者这可能是针对可穿戴设备的特定情况? (在我看来,可穿戴功能看起来有点不稳定,我经常看到这样的事情。)

我能做些什么来找出有时会出现延迟的原因,并将其消除。

2 个答案:

答案 0 :(得分:0)

您是否曾尝试在开始活动前使用唤醒锁?您的设备可以在活动开始前进入睡眠状态 我认为这里最好的方法是使用acqure(long timeout)方法自动释放锁。

答案 1 :(得分:-5)

你的构造函数很可能花费了很多时间。检查您是否正在初始化类的值,例如

class Foo {
  private int bar = someComplexObjectOp();
}

像Paints这样的东西可以作为静态值放入,也可以节省时间。

请注意,如果您的班级本身非常大(100名左右的成员),那么加载它也需要时间。