2012-03-29 6 views
3

私はLocationListenerサービスも持っています。新しいロケーションイベントの時には、何らかの種類のネットワークを実行し、時間がかかることがあります。そのため、AsyncTaskとして実装されています。プロセスが停止しました/クラッシュしたサービスの再起動をスケジュールします

は、多くの場合、私は、実際のデバイス上のログには以下を参照してくださいいくつかの大規模なアプリケーションがロードされた後

03-29 17:02:20.847 D/dalvikvm( 235): GC_FOR_ALLOC freed 961K, 29% free 10234K/14215K, paused 26ms 
03-29 17:02:20.855 I/DemoService( 555): DiyScheduer.onStart 
03-29 17:02:20.855 I/ggheart ( 555): onStart 
03-29 17:02:21.097 V/PhoneStatusBar( 235): setLightsOn(true) 
03-29 17:02:21.121 W/IInputConnectionWrapper(11244): showStatusIcon on inactive InputConnection 
03-29 17:02:21.277 I/ActivityManager( 161): Process android.process.media (pid 11298) has died. 
03-29 17:02:22.058 I/ActivityManager( 161): Process com.idavydov.myapp (pid 11051) has died. 
03-29 17:02:22.066 I/WindowManager( 161): WIN DEATH: Window{41b05850 com.idavydov.myapp/com.idavydov.myapp.MyActivity paused=false} 
03-29 17:02:22.074 W/ActivityManager( 161): Scheduling restart of crashed service com.idavydov.myapp/.MyService in 5000ms 

は通常それが起こります。

このメモリーが少ないのはなぜですか?そのような場合、ログにそのような種類のメッセージがないのはなぜですか?

P.S.他の質問では、その理由は仕事に時間がかかりすぎるという説明がありました。しかし私は私のAsyncTaskに次のコードを追加し、エミュレータでクラッシュを再現できませんでした。私はあなたが二つのことを考えて混合

protected Boolean doInBackground(...) { 
     ... 
     long time = System.currentTimeMillis(); 
     while (System.currentTimeMillis() - time < 11 * 1000); 
     .... 
    } 

おかげ

+0

doInBackgroundを実行するたびにプロセスが停止しますか? – Orest

+0

いいえ時々だけ。 –

答えて

1

。 AndroidはUIスレッドをブロックすることはできません。もしそうなら、あなたのアプリを終了させます。ブロッキング処理とループをAsyncTaskのバックグラウンドプロセスに入れない限り。

さらに、メモリが足りない場合、またはアプリがユーザーに影響を与えていないと判断された場合、アンドロイドはアプリを強制終了します。 あなたのアプリを長くしたい場合は、スティッキーなサービスと優れたアプリライフサイクルマネジメントが必要です。

+0

サービスが殺された理由を特定する方法はありますか? –

+0

@IakovDavydovおそらくデバイスログを取得した場合 – Adrian

+0

小さな断片が質問に表示されます。しかし、私はその時間近くに私のサービスに関連するものは何も見ません。 –

関連する問題