2011-03-25 61 views
0

在我的應用程序的主要活動,我開始一個服務是這樣的:爲什麼停止我的服務殺死前臺活動?

Intent i = new Intent(this, MyService.class); 
startService(i); 

當用戶按下一個按鈕,我停止服務是這樣的:

Intent i = new Intent(this, MyService.class); 
stopService(i); 

當我這樣做,前景導致通話被中止並消失的活動。

考慮到可能需要在單獨的進程中運行服務,我嘗試在清單中的服務上設置android:process =「:remote」,但那並沒有改變行爲。

看來,我不能停止服務,而不會殺死整個應用程序。有沒有解決的辦法?

+0

這不是正常的行爲。啓動ddms,重新創建錯誤併發布日誌。 – 2011-03-25 01:15:58

回答

0

我想通了,爲什麼這個應用程序被殺害。在我服務的的onDestroy()方法中,我被禁用的廣播接收機是這樣的:

PackageManager pacman = getPackageManager(); 
pacman.setComponentEnabledSetting(
    new ComponentName(this, MyReceiver.class), 
    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
    0); 

此代碼禁用在AndroidManifest.xml中定義的廣播接收器。最後一個參數0應該被設置爲DONT_KILL_APP。我改變了這個代碼,它解決了這個問題:

PackageManager pacman = getPackageManager(); 
pacman.setComponentEnabledSetting(
    new ComponentName(this, MyReceiver.class), 
    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
    PackageManager.DONT_KILL_APP); 
0

沒有日誌我們無法確定,但我有一個很好的預感,你的應用程序拋出一個異常,並且你正在悄悄地捕捉和關閉,或者你有一個奇怪的關鍵路徑叫finish

在任何情況下,你所描述的是不是預期,但我們需要更多的信息,以提供更好的答案

+0

好的建議,但我檢查了無聲的catch塊,以及不正確的調用完成(),並且什麼都沒發現。 – 2011-03-26 04:28:26

相關問題