Androidでのサービスの手動、自動、および特殊な条件での再起動について
3122 ワード
前回のブログではサービス間の守護についてお話ししました.
ブログアドレス:http://blog.csdn.net/lemon_tree12138/article/details/40322887
そしてこのSeviceの守りは、私たちは何かをすることができます.たとえば、再起動します.再起動を見ると、サービス自体が再起動したいのではないでしょうか.残念ながら、サービスはkill(ondestory)が自分を落とした後にまたonstartを再開することはできません.だから、私たちは人為的に再起動しなければなりません.ここでは前のブログのサービス間の保護問題を利用しなければなりません.実は簡単で一般的な方法です.次に、最初の手動再起動から開始します.
1.手動でサービスを再起動する:
コアコード:
ここでActionは以下のようにManifestプロファイルに追加する必要があります.
2.サービスの自動再起動:
コアコード:
ここで私たちが行う再起動条件は10秒ごとに再起動するので、スレッドを開いて秒を読む必要があります.10秒になったら、「再起動」します.ここで筆者はサボることをして、秒を読むアルゴリズムに対してシステム時間を取得し、それを余すだけで、このような結果は最初の10秒が不足する可能性があり、もちろん改善する方法はたくさんあります.筆者はここではプレゼンテーションをしません.
3.特別な条件での再起動:
コアコード:
ここでは、スクリーンの開スクリーン、オフスクリーンの状態を監視するために使用します.私の前のブログを見ていないし、サービスの再起動についてよく知らない友达は、ここのサービスに対してstopをしているのか、restartがないのか、サービスのstopがrestartなのか、実はそうではないのかと質問するかもしれません.興味のある方は、私の前のブログ「Androidではサービスを利用してプロセスを守る」を見てください.
エンジニアリング接続:http://download.csdn.net/detail/u013761665/8129761
ブログアドレス:http://blog.csdn.net/lemon_tree12138/article/details/40322887
そしてこのSeviceの守りは、私たちは何かをすることができます.たとえば、再起動します.再起動を見ると、サービス自体が再起動したいのではないでしょうか.残念ながら、サービスはkill(ondestory)が自分を落とした後にまたonstartを再開することはできません.だから、私たちは人為的に再起動しなければなりません.ここでは前のブログのサービス間の保護問題を利用しなければなりません.実は簡単で一般的な方法です.次に、最初の手動再起動から開始します.
1.手動でサービスを再起動する:
コアコード:
Intent killOneIntent = new Intent();
killOneIntent.setAction("com.example.servicedemo.ServiceTwo");
MainActivity.this.stopService(killOneIntent);
ここでActionは以下のようにManifestプロファイルに追加する必要があります.
2.サービスの自動再起動:
コアコード:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// 10 Service
if ((System.currentTimeMillis() / 1000) % 10 == 0) {
stopSelf();
}
boolean b = MainActivity.isServiceWorked(ServiceTwo.this, "com.example.servicedemo.ServiceOne");
if(!b) {
Intent service = new Intent(ServiceTwo.this, ServiceOne.class);
startService(service);
}
}
};
timer.schedule(task, 0, 1000);
}
});
ここで私たちが行う再起動条件は10秒ごとに再起動するので、スレッドを開いて秒を読む必要があります.10秒になったら、「再起動」します.ここで筆者はサボることをして、秒を読むアルゴリズムに対してシステム時間を取得し、それを余すだけで、このような結果は最初の10秒が不足する可能性があり、もちろん改善する方法はたくさんあります.筆者はここではプレゼンテーションをしません.
3.特別な条件での再起動:
コアコード:
class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
String intentActionString = intent.getAction();
if (intentActionString.equals(Intent.ACTION_SCREEN_ON)) { //
Log.e("screenon" + TAG, "----------------------- on!");
} else if (intentActionString.equals(Intent.ACTION_SCREEN_OFF)) { //
Log.e("screenon" + TAG, "----------------------- off!");
stopSelf();
} else if (intentActionString.equals(Intent.ACTION_USER_PRESENT)) { //
Log.e("screenon" + TAG, "----------------------- unlock!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ここでは、スクリーンの開スクリーン、オフスクリーンの状態を監視するために使用します.私の前のブログを見ていないし、サービスの再起動についてよく知らない友达は、ここのサービスに対してstopをしているのか、restartがないのか、サービスのstopがrestartなのか、実はそうではないのかと質問するかもしれません.興味のある方は、私の前のブログ「Androidではサービスを利用してプロセスを守る」を見てください.
エンジニアリング接続:http://download.csdn.net/detail/u013761665/8129761