日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android coreservice作用,android service重启

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android coreservice作用,android service重启 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,說一下思路,很簡單,啟動兩個service檢測對方,如果發現對方killed,立馬啟動就可以了.具體實現代碼如下

1.先準備兩個service,CoreService和DaemonService

android:name="com.david.service.CoreService"

android:enabled="true">

android:name="com.david.service.DaemonService"

android:enabled="true"

android:process=":daemon">

注意,DaemonService多了一項屬性.

android:process=":daemon"

這里其實通過觀察設置-應用管理-正在運行,你會發現QQ,微信等都會有兩個進程.那兩個QQ的進程,就是這么來的.

2.然后準備兩個Receiver用來接受service發出的檢測對方是否運行的廣播

android:name="com.david.receiver.CoreReceiver"

android:enabled="true">

android:name="com.david.receiver.DaemonReceiver"

android:enabled="true"

android:process=":daemon">

同樣,DaemonReceiver跟DaemonService一樣,被放到了:daemon進程中.

3.Service相互檢測對方

CoreService啟動線程發送廣播:

public?class?CoreService?extends?Service?{

private?static?final?int?DAEMON_CHECK_INTERVAL=1000?*?2;

private?Intent?coreIntent?=?new?Intent("com.david.receiver.CORE");

private?Thread?coreThread?=?null;

@Nullable

@Override

public?IBinder?onBind(Intent?intent)?{

return?null;

}

@Override

public?void?onCreate()?{

super.onCreate();

startThread();

}

private?void?startThread(){

coreThread?=?new?Thread(new?DaemonCheckThread());

coreThread.start();

}

private?class?DaemonCheckThread?implements?Runnable?{

public?DaemonCheckThread()?{

}

@Override

public?void?run()?{

while?(true)?{

try?{

sendBroadcast(coreIntent);

Thread.sleep(DAEMON_CHECK_INTERVAL);

}?catch?(InterruptedException?e)?{

//?ignore

}

}

}

}

}

CoreReceiver中檢測DaemonService是否運行,如果killed,則啟動DaemonService:

public?class?CoreReceiver?extends?BroadcastReceiver?{

private?static?final?String?DAEMON_SERVICE="com.david.service.DaemonService";

@Override

public?void?onReceive(Context?context,?Intent?intent)?{

if(!ServiceUtil.isServiceRunning(context,DAEMON_SERVICE)){

ServiceUtil.startService(context,DAEMON_SERVICE);

}

}

}

另外一邊也是一樣,DaemonService中啟動線程發送廣播,DaemonReceiver中接受廣播,檢測CoreService的運行狀態

DaemonService:

public?class?DaemonService?extends?Service?{

private?static?final?int?CORE_CHECK_INTERVAL=1000?*?2;

private?Intent?daemonIntent?=?new?Intent("com.david.receiver.DAEMON");

private?Thread?daemonThread?=?null;

@Nullable

@Override

public?IBinder?onBind(Intent?intent)?{

return?null;

}

@Override

public?void?onCreate()?{

super.onCreate();

startThread();

}

private?void?startThread(){

daemonThread?=?new?Thread(new?CoreCheckThread());

daemonThread.start();

}

private?class?CoreCheckThread?implements?Runnable?{

public?CoreCheckThread()?{

}

@Override

public?void?run()?{

while?(true)?{

try?{

sendBroadcast(daemonIntent);

Thread.sleep(CORE_CHECK_INTERVAL);

}?catch?(InterruptedException?e)?{

//?ignore

}

}

}

}

}

DaemonReceiver:

public?class?DaemonReceiver?extends?BroadcastReceiver?{

private?static?final?String?CORE_SERVICE="com.david.service.CoreService";

@Override

public?void?onReceive(Context?context,?Intent?intent)?{

if(!ServiceUtil.isServiceRunning(context,CORE_SERVICE)){

ServiceUtil.startService(context,CORE_SERVICE);

}

}

}

4.最后一步,檢測服務是否運行

public?class?ServiceUtil?{

private?static?final?Logger?logger?=?LoggerFactory.getLogger(ServiceUtil.class);

public?static?boolean?isServiceRunning(Context?context,?String?serviceName)?{

boolean?isServiceRunning?=?false;

ActivityManager?manager?=?(ActivityManager)?context.getSystemService(Context.ACTIVITY_SERVICE);

for?(ActivityManager.RunningServiceInfo?service?:?manager.getRunningServices(Integer.MAX_VALUE))?{

if?(serviceName.equals(service.service.getClassName()))?{

isServiceRunning?=?true;

break;

}

}

logger.debug(String.format("service?[%s]?running?status:[%s]",?serviceName,?isServiceRunning));

return?isServiceRunning;

}

public?static?void?startService(Context?context,?String?action)?{

logger.debug(String.format("start?service?[%s]",?action));

Intent?mIntent?=?new?Intent();

mIntent.setAction(action);

mIntent.setPackage(context.getPackageName());

context.startService(mIntent);

}

}

總結一下就是兩個進程中各有一個service,互相檢測對方運行狀態,如果沒在運行,則啟動.我這里android 4.4.4測試有效.

總結

以上是生活随笔為你收集整理的android coreservice作用,android service重启的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。