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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中利用服务来守护进程

發布時間:2025/3/20 Android 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中利用服务来守护进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 我們寫程序的時候,肯定會用到Service,而且還不止使用一個。當我們的程序中用到了Service的時候,說不定會被停掉。例如像360這樣的殺毒軟件可能會誤操作對我們的Service有威脅。那么我們就需要對我們的Service進行一個保護,也就是這里所說的守護。

? ? ? ? 那么問題就來了,要怎么守護呢?說到守護,當然不可能是自己守護自己,那么這里就必然會存在另一個進程,理論上用Context的向下轉型的類都是可以的,不過一般情況下我們只是用Service對Service進行一個守護,原因很簡單,我們不關心Service是否存在,因為它對于用戶是一個“暗地里”的東西。試想一下,如果我們利用Activity對Service進行一個守護,那么當Activity因為某種操作銷毀了,怎么辦?可能你要問,可不可以,我想是可以的。

? ? ? ? 這里如果我們要用A來守護B,那我們就可以會說如果A被停掉了,又該怎么辦。既然A可以守護B,B當然也是可以守護A的。

具體實現的關鍵代碼如下:

首先,重寫Service的onStartCommand方法,這里要注意不是onStart方法,因為在Android2.0以后,對于Service的開始方法,用的是onStartCommand,而onStart會在有onStartCommand的情況下,被忽視。

@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {thread.start();return START_STICKY;}接下來就通過一個子線程來實時檢測我們Service是否死掉了,如果發現我們所檢測的Service死了,則進行重啟。

Thread thread = new Thread(new Runnable() {@Overridepublic void run() {Timer timer = new Timer();TimerTask task = new TimerTask() {@Overridepublic void run() {boolean b = MainActivity.isServiceWorked(ServiceOne.this, "com.example.servicedemo.ServiceTwo");if(!b) {Intent service = new Intent(ServiceOne.this, ServiceTwo.class);startService(service);}}};timer.schedule(task, 0, 1000);}});大家可以看到上面有一個isServiceWorked方法,顧名思義,這個方法就是用來檢測所守護的Service是否還活著。實現如下:

public static boolean isServiceWorked(Context context, String serviceName) {ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);ArrayList<RunningServiceInfo> runningService = (ArrayList<RunningServiceInfo>) myManager.getRunningServices(Integer.MAX_VALUE);for (int i = 0; i < runningService.size(); i++) {if (runningService.get(i).service.getClassName().toString().equals(serviceName)) {return true;}}return false;}這里程序沒有寫測試線程的方法,不過我想難不到大家,筆者在這里偷了個懶。
如果你跟我一樣不想寫這一部分的代碼,你大可打開手機設置中的應用程序功能,里面就有關于測試的方法。你可以選擇運行的程序頁,再選擇你現在的程序,會看到程序的進程和服務個數以及具體情況,點進去,會看到你程序中所開啟的服務和進行,有一個停止按鈕,點擊停止,如果你的程序可以用,那么在停止一兩秒之后,服務又會被開啟的。

右側是本博文工程連接:http://download.csdn.net/detail/u013761665/8061695


總結

以上是生活随笔為你收集整理的Android中利用服务来守护进程的全部內容,希望文章能夠幫你解決所遇到的問題。

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