2

私は60秒ごとにCPUの激しいタスクを実行しようとしています。私はPendingIntentでAlarmManagerを使用しています`

    Intent intent = new Intent(MainActivity.this,AlarmReciever.class);
    PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, 0);
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), period, pi);

AlarmReciever.classは、サードパーティのバイナリを使用して強力な処理を実行し、完了するまでに最低12秒かかります(同じアクティビティの実行としてテストされた場合)。しかし、PendingIntentと同じように実行すると、開始後数秒でリモートプロセスが停止することがわかります。このエラーが発生します

03-03 03:09:45.417: INFO/ActivityManager(109): Start proc com.am:remote for broadcast com.am/.AlarmReciever: pid=7940 uid=10052 gids={1015}

03-03 03:09:55.375: WARN/ActivityManager(109): Timeout of broadcast BroadcastRecord{40a1ee80 null} - receiver=android.os.BinderProxy@4074f798, started 10003ms ago

03-03 03:09:55.375: WARN/ActivityManager(109): Receiver during timeout: ResolveInfo{40ae3380 com.am.AlarmReciever p=0 o=0 m=0x0}

03-03 03:09:56.105: ERROR/ActivityManager(109): ANR in com.am:remote

03-03 03:09:56.105: ERROR/ActivityManager(109): Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) }

03-03 03:09:56.105: ERROR/ActivityManager(109): Load: 1.44 / 1.42 / 1.29

Logcatで。それは言う

 Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) }

しかし、私は意図に余分なものを入れていません。しかし、将来的には何かを置きたいと思います。

誰かが親切に私がなぜそれがとても速く閉じるのか、そしてそれがそのタスクを終えた後にのみプロセスが死ぬために何ができるのかを理解するのを手伝ってくれませんか?

マニフェストはこのようにリストされます

   <receiver  android:process=":remote" android:name="AlarmReciever"></receiver>

追加するために、私はSOでこの回答で提供された解決策を試しましたが、それでも運がありません

4

1 に答える 1

1

ついに自分で答えを得て、

BroadcastReceiverオブジェクトは、onReceive(Context、Intent)の呼び出し中のみ有効です。コードがこの関数から戻ると、システムはオブジェクトが終了し、アクティブでなくなったと見なします。

出典:ここをクリック

于 2011-03-12T04:04:25.877 に答える