이전에 비슷한 질문을했지만 WakeLock을 추가 한 후에 문제가 해결되었습니다. 약간의 시간이 지났고 문제가 다시 발생했습니다.활동 시작이 지연됨 (WakeLock 사용)
배경 - Alarm Activity가 BroadcastReceiver (아래 코드)에서 시작되는 알람 응용 프로그램입니다. 문제가 무작위로 발생하기 시작 했으므로 이전에는 문제가 없었습니다. 나는 사용자가 보낸 로그에서 온 버그에 대한 모든 정보 - - 응용 프로그램이 데이터베이스에 로그를 저장 로거 구축이 오류가 나에게 발생하지 않았다을 ... 로그 :
880. 6/3 5:0:1 - == Logger initialized == from AlarmReceiver
881. 6/3 5:0:1 - sending START ALARM
882. 6/3 5:0:1 - WakeLock creating
883. 6/3 5:0:1 - WakeLock acquiring for 300000
884. 6/3 5:0:2 - START ALARM send
885. 6/3 5:0:2 - logger initialized again from StartAlarmReceiver
886. 6/3 5:0:2 - logger initialized again from Main
887. 6/3 5:0:3 - start initializeTask //from Main.onCreate
888. 6/3 5:0:3 - Main start
889. 6/3 5:0:4 - Main resume
890. 6/3 5:0:4 - Main pause
891. 6/3 5:0:4 - Main stop
... not relevant
894. 6/3 6:0:0 - logger initialized again from AlarmOnScreen create
AlarmReceiver를 :
public void onReceive(Context context, Intent intent) {
Logger.initialize(context, "AlarmReceiver");
if (call_is_on) {
postAgainIn5Sec();
} else {
Utils.log("sending START ALARM");
CountedWakeLock.acquireLock(context); // acquired for 30000 millis
Intent i = new Intent();
i.setAction(StartAlarmReceiver.ACTION_START_ALARM);
i.putExtras(intent.getExtras());
context.sendOrderedBroadcast(i, null);
Utils.log("START ALARM send");
}
}
StartAlarmReceiver (안드로이드 : launchMode = "singleTask")
public void onReceive(Context context, Intent intent) {
Logger.initialize(context, "StartAlarmReceiver");
Intent i = new Intent(context, AlarmOnScreen.class);
Bundle extras = intent.getExtras();
i.putExtras(extras);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
AlarmOnScreen
012,339,CountedWakeLock :
public synchronized static void acquireLock(Context context, long delay) {
if (sWakeLock == null) {
Utils.log("WakeLock creating");
PowerManager pm = (PowerManager) context.getApplicationContext()
.getSystemService(Context.POWER_SERVICE);
sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"AlarmReceiver lock");
sWakeLock.setReferenceCounted(false);
sLockCount = 0;
}
Utils.log("WakeLock acquiring for " + delay);
sLockCount++;
sWakeLock.acquire(delay);
}
TL; DR은 - 그것은 startActivity를 호출 한 후 그에서 onCreate 메소드를 호출하는 AlarmOnScreen 활동에 대한 시간 정도 걸렸다.
질문 - startActivity를 호출 한 직후에 활동이 시작되지 않은 이유는 무엇입니까? 또한 Alarm이 시작될 때 Main이 시작되는 것을 방지 할 수 있습니까? onCreate 메서드에서 시작된 스레드에서 일부로드를 수행하고 Main이 표시되지 않아야한다는 점은 의미가 없습니다.