2012-03-29 15 views
1

私は、押されると、私のウィジェットを更新するCountDownTimerを開始するブロードキャストを送信し、最後にアラームを再生するウィジェットを持っています。これはエミュレータで美しく動作します。CountDownTimerが実行されて完了するようにするにはどうすればよいですか?

私の電話では、それは別の話です。私の携帯電話はリソースが限られているため、プロセスが定期的に抹消されてしまいます。もちろんCountDownTimerが私のウィジェットを更新しないということです。

将来的に確実に行う唯一の方法は、システムレベルのアラームを設定するため、AlarmManagerを使用することです。しかし、文書では、ダニのために使用するはずがないと述べています。しかし、あなたが使用する可能性の高いものは任意にシャットダウンされる可能性があるので、実際に私たちに多くの選択肢を与えているわけではありません。

私の質問は、CountDownTimerがティックを保ち、最後にonFinish()を呼び出すかどうか、あるいは単にドロップしてAlarmManagerに切り替えてそれを「誤用」する必要があるかどうかです。そのことを確認し、終了することを保証する他のオプションも歓迎されます。

私は、onUpdate()を呼び出すOSに頼ることはできません。なぜなら、30分ごとに速くなるわけでもなく、ほとんどの場合ウィジェットが何もしないからです。それがクリックされたときに、ほんの数分の間毎秒刻々と変化する。活動のOnCreateの

Intent intent = new Intent(this, DummyService.class); 
startService(intent); 

答えて

0

私がやったことは、BroadcastReceiverからサービスに移行したことでした。 ダミーサービスを使用するだけでなく、実際のサービスを持つことで、BroadcastReceiverが前に行ったことが具体化されます。

これが私のタイマーが殺されることを保証するものではありません。要求された場合、アンドロイドは殺された後自動的にサービスを再開しようとします。このイベントでは、ディスクから実行状態を復元して続行するコードをいくつか用意しています。

0

私は

public class DummyService extends Service{ 


@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
@Override 
    public void onCreate() { 
     super.onCreate(); 

    } 
    @Override 
    public void onDestroy() { 

     super.onDestroy(); 

    } 
} 

...ダミーのサービスを作成します。これが解決策だと思うと、次のようにcountdowntimer使用して、あなたの活動から起動...とこのようなあなたのマニフェストでこのサービスを宣言することを忘れないでください..

<service android:name=".DummyService" > 
</service> 

これは役に立ちます..

+0

これは何を達成するでしょうか? –

+0

しかし、サービスは依然として殺される可能性があります。さらに、CountDownTimerを持つものはアクティビティではなく、BroadcastReceiverですが、おそらくそれは問題ではありません。基本的には、このサービスをアンカーとして使用しています。私は何が起こるか知っている。顧客は時折カウントダウンがうまくいかないと不平を言うだろう... –

+0

実際には、これと組み合わせたサービスがチケットになるかもしれません:http://stackoverflow.com/questions/3856767/android-keeping-a-background-service-alive-preventing-process-death –

0

the accepted answerに追加する:私が覚えているところでは、BroadcastReceiverは、ブロードキャストを処理するのに必要な期間のみ有効です。

BroadcastReceiverの中からタイマーなどを起動しても機能しません(前述のとおり)。

これは、BroadcastReceiverを使用してタイミングを実行するServiceを起動することが推奨される理由です。確かに、サービスはまだ殺されることができますが、早ければBroadcastReceiverほど早く殺されることはありません。

関連する問題