Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 活动启动延迟(带唤醒锁)_Android_Android Activity_Wakelock_Start Activity - Fatal编程技术网

Android 活动启动延迟(带唤醒锁)

Android 活动启动延迟(带唤醒锁),android,android-activity,wakelock,start-activity,Android,Android Activity,Wakelock,Start Activity,我以前也问过类似的问题,但在添加WakeLock后问题得到了解决。一段时间过去了,问题又出现了 后台-这是一个报警应用程序,报警活动从下面的广播接收器代码开始。问题开始随机出现,以前没有问题。应用程序有内置的记录器,将日志保存到数据库中-所有关于错误的信息都来自用户发送的日志-错误从未发生在我身上。。。日志: 880. 6/3 5:0:1 - == Logger initialized == from AlarmReceiver 881. 6/3 5:0:1 - sending START AL

我以前也问过类似的问题,但在添加WakeLock后问题得到了解决。一段时间过去了,问题又出现了

后台-这是一个报警应用程序,报警活动从下面的广播接收器代码开始。问题开始随机出现,以前没有问题。应用程序有内置的记录器,将日志保存到数据库中-所有关于错误的信息都来自用户发送的日志-错误从未发生在我身上。。。日志:

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
报警接收器:

 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");
    }
}
 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);
}
星光接收机:

 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");
    }
}
 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);
}
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方法大约花了一个小时

问题-为什么活动不是在调用startActivity之后才开始的?
此外,我是否可以在警报启动时阻止Main启动?我在从onCreate方法开始的线程中进行了一些加载,当Main甚至不应该显示时,这是毫无意义的。

下一个日志已澄清问题是由WakeLock无法正常工作引起的-有关详细信息,请转到