以前にも同様の質問をしましたが、WakeLockを追加すると問題が修正されました。しばらく経ち、問題が再発しました。
背景-これはアラームアプリケーションであり、BroadcastReceiverからアラームアクティビティが開始されます(以下のコード)。問題はランダムに発生し始めており、以前は問題はありませんでした。アプリケーションには、ログをデータベースに保存するLoggerが組み込まれています-ユーザーから送信されたログから発生したバグに関するすべての情報-エラーが発生したことはありません...ログ:
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:
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(android:launchMode = "singleTask"を使用)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
setContentView(R.layout.alarm_on_screen);
Logger.initialize(this, "AlarmOnScreen create");
//...
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が呼び出された後、AlarmOnScreenアクティビティがonCreateメソッドを呼び出すのに約1時間かかりました。
質問-startActivityを呼び出した直後にアクティビティが開始されなかったのはなぜですか?また、アラーム起動時にメインが起動しないようにすることはできますか?onCreateメソッドから開始されたスレッドでロードを実行しますが、Mainが表示されるべきでない場合は無意味です。