我正在实现一个活动总是在顶部(通常实现锁屏),算法很简单:
- <
- 开始活动/gh>
- 禁用所有硬件按钮,禁用背按,相机锁定,音量按钮等
- 当activity被暂停时,调用一个服务来检查并重新启动activity。
参考以下答案的逻辑:答案1,答案2每当Activity暂停并由Service重新启动时,都会有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");
}
}
onPause, onStop和onDestroy中的代码应该尽可能快地执行。也就是说,不要通过在这里放置大量代码来阻止这些方法。但同样,这取决于你在这里做什么。如果这些事情真的很重要,我不知道你怎么能减少时间延误。
"如何减少Activity的暂停和重启之间的时间延迟。"
您是否测量了这两个间隔的时间成本?
基本上,两种类型的任务:一种是系统任务和你的应用程序任务。
adb logcat -b system -v threadtime
应该打印出与活动/服务启动/停止相关的所有系统bahvoir,以及时间戳。
你应该/可以尽可能地减少花在应用程序上的时间,但是没有办法减少系统行为的时间成本。