我從活動創建了一個已啓動的服務。我很好奇:如果活動被破壞會發生什麼?服務是否仍然運行? (我認爲它運行!)活動被破壞並重新創建後開始訪問服務
然後,當活動重新創建,有什麼辦法與該服務進行通信?我只需要知道服務是否仍在運行,如果正在運行,那麼我想將活動的引用傳遞給服務。
我從活動創建了一個已啓動的服務。我很好奇:如果活動被破壞會發生什麼?服務是否仍然運行? (我認爲它運行!)活動被破壞並重新創建後開始訪問服務
然後,當活動重新創建,有什麼辦法與該服務進行通信?我只需要知道服務是否仍在運行,如果正在運行,那麼我想將活動的引用傳遞給服務。
好的,評論不夠大。以下是我用來啓動服務的一些代碼。啓動服務之後是一個函數,用於確定服務是否正在運行。 DownloadDatabase類擴展了IntentService。該服務下載一個由Android外部創建的70兆SQLite數據庫。
Intent intentService = new Intent(this, DownloadDatabase.class);
startService(intentService);
以下函數檢查服務是否已在運行。它被編碼爲一個函數,因爲我從其他例程中調用它來執行其他的驗證,如果沒有運行的話。
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
if ("com.hodsonssoftwarellc.nutritionexplorer.DownloadDatabase"
.equals(service.service.getClassName())) {
return true;
}
}
return false;
}
您還需要以下權限在您的清單:
uses-permission android:name="android.permission.GET_TASKS"
什麼在isMyServiceRunning功能發生如下:
所以,回答你的問題,是的,你可以檢查它是否從你的任務開始運行。即使您退出該任務並重新開始。您還可以檢查是否正在從不同的活動或應用運行。
注意:此代碼是爲2.x兼容性編寫的。如果您正在使用版本3或更高版本進行下載,請使用下載管理器,而不要編寫自己的下載服務。
取決於服務類型。取決於您的啓動參數。有些會通過電話關機/開機或重新開機。定時器服務將需要由您的應用程序重新啓動(需要註冊以啓動通知才能完成此操作)。如果您需要註冊喚醒並處理廣播,則您的服務將保持過去應用程序銷燬的狀態。另外,請小心應用程序服務的上一個結尾。你真的可以用這種方式阻塞某人的電話。真的,真的是徹底地測試它們。 – 2012-07-20 19:30:39
有沒有辦法檢測服務是否已經啓動並運行?我想從一個活動中檢測到,如果它尚未啓動,它將啓動此服務。 – giga 2012-07-21 03:46:43