我有一个可穿戴的应用程序,其中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秒的间隙。
是否有人观察到此类延迟与一般活动有关,或者这可能是针对可穿戴设备的特定情况? (在我看来,可穿戴功能看起来有点不稳定,我经常看到这样的事情。)
我能做些什么来找出有时会出现延迟的原因,并将其消除。
答案 0 :(得分:0)
您是否曾尝试在开始活动前使用唤醒锁?您的设备可以在活动开始前进入睡眠状态
我认为这里最好的方法是使用acqure(long timeout)
方法自动释放锁。
答案 1 :(得分:-5)
你的构造函数很可能花费了很多时间。检查您是否正在初始化类的值,例如
class Foo {
private int bar = someComplexObjectOp();
}
像Paints这样的东西可以作为静态值放入,也可以节省时间。
请注意,如果您的班级本身非常大(100名左右的成员),那么加载它也需要时间。