【发布时间】:2013-05-05 15:03:36
【问题描述】:
我正在实现一个始终处于顶部的活动(通常实现锁定屏幕), 算法很简单:
- 开始活动
- 禁用所有硬件按钮,禁用后按、相机锁定、音量按钮等。
- 每当活动暂停时,调用服务检查并重新启动活动。
请参阅这些答案以了解逻辑:Answer 1、Answer 2 每当 Activity 暂停并由服务重新启动时,都会有 6-7 秒的延迟。如何减少我的 Activity 暂停和重新启动之间的时间延迟。
暂停和恢复代码:
protected void onPause() {
isFront = false;
Intent lockHelper = new Intent( this, LockHelper.class);
startService( lockHelper );
super.onPause();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
if(keyCode==KeyEvent.KEYCODE_CAMERA)
return true;
else if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN)
return true;
else if(keyCode==KeyEvent.KEYCODE_VOLUME_UP)
return true;
else if(keyCode==KeyEvent.KEYCODE_HOME)
return true;
else if(keyCode==KeyEvent.KEYCODE_POWER)
return true;
else
return true;
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent keyEvent) {
if(keyCode==KeyEvent.KEYCODE_HOME)
return true;
else if(keyCode==KeyEvent.KEYCODE_POWER)
return true;
else
return true;
}
@Override
public void onBackPressed() {
}
@Override
protected void onResume() {
isFront = true;
Intent lockHelper = new Intent( this, LockHelper.class);
startService( lockHelper );
super.onResume();
}
}
服务是:
public class LockHelper extends Service {
@Override
public void onStart(Intent intent, int startId) {
if(Locker.isFront == false){
Intent locker = new Intent( this, Locker.class);
locker.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity( locker );
stopSelf();
}
}
public LockHelper() {
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
}
【问题讨论】:
-
我建议你做一个更详细的时间戳调试,
6-7 seconds是根据你的直觉计算出来的吗?您可以在 Activity.onPause()、Service.onStart()、Activity.onCreate() 和 Activity.onResume() 上记录消息。这样您就可以根据日志时间戳知道哪个部分花费了很多时间。并删除 stopSelf,将您的代码放在 onStartCommand 上,重新创建服务可能需要大量时间,我相信这就是您的延迟发生的地方。 -
@ChorWaiChun 不是基于直觉,实际上 Activity 在其布局中有一个时钟,我通过时钟检查时间,即隐藏 Activity 的秒数。
-
那么我建议您根据我以前的 cmets 对您的服务进行一些更改。
-
@RachitMishra 我面临同样的问题。你找到解决方案了吗?
-
@AnkurRaiyani 不!我现在采用了不同的方法。
标签: android