如果我設置了斷點並且服務主線程在那裏停止,則整個服務進程在幾秒鐘後(大約5)被Android關閉。當發生這種情況時也幾乎不可能進行操作(無法評估表達式,看不到當前上下文變量等)。如果它不是服務主線程,那麼沒有問題,調試工作就很好。調試服務主線程
該服務通過活動啓動。
那麼,有沒有辦法調試一個沒有Android的服務主線程殺死它?
在此先感謝!
如果我設置了斷點並且服務主線程在那裏停止,則整個服務進程在幾秒鐘後(大約5)被Android關閉。當發生這種情況時也幾乎不可能進行操作(無法評估表達式,看不到當前上下文變量等)。如果它不是服務主線程,那麼沒有問題,調試工作就很好。調試服務主線程
該服務通過活動啓動。
那麼,有沒有辦法調試一個沒有Android的服務主線程殺死它?
在此先感謝!
沒有,如果你必須使用主線程。這就是說有幾種方法可以使它不在主線程上運行,具體取決於你使用服務的方式。
如果您從onStartCommand運行: 在執行程序(在不同的線程中)運行進程或在意圖服務中使用,這將自動爲您執行此操作。 如果您使用onbind: 同樣適用,請在後臺運行它,但intentservice無法幫您解決這個問題。如果是這種情況,讓我知道我會告訴你如何做到這一點。
更新:
有可能是一個發展的選擇,可以幫助你,在你的設備的發展選擇,使顯示所有ANR。這可能表明一個ARN當你阻止服務主線程,而不是僅僅殺死它
(此選項運行Android 4.1.2我的手機上存在)如果不工作,你可以使用這個技巧:
由於您無法更改該服務本身的代碼,因此您可以嘗試以下有點混亂和駭人聽聞的問題。不能保證它可以工作,但可能值得一試。
創建一個擴展IntentService的新服務。在onCreate中創建一個包裝服務,擴展你想要調試的服務。喜歡這個。將其保存爲一個變量並調用它的所有生命週期方法。 onStartCommand
mWrappedService = new YourServiceClass() {
{
attachBaseContext(WrappingService.this);
}
public IBinder onBind(Intent intent) {
return super.onBind(intent);
}
@Override
public Context getBaseContext() {
return WrappingService.this;
}
}
在本例中,WrappingService是您的新類,YourServiceClass是您嘗試調試的服務。
然後在你的onHandleIntent中調用onStartCommand方法的服務。只要服務類不是最終的,這應該工作。
現在你至少可以調試了。
謝謝你的答案,但我正在尋找讓它在主線程停下來的方法。我知道我可以停止在其他線程,並已經測試它,它工作正常,但這是一個固定的服務,我不能修改。 – m0skit0
我更新了我的評論和更多建議,如果這不起作用,我恐怕沒有辦法做到這一點 – nickmartens1980
我不明白ANR通知如何幫助我解決問題......但服務包裝是一個很好的建議,謝謝! – m0skit0
對dowvotes的評論是值得歡迎的,所以我可以改善我的問題,如果有什麼不對,謝謝:) – m0skit0
你的服務在做什麼?我有一個服務,我用來連接ws ...是你的情況嗎? –
我的服務執行不同的東西,太多以在這裏列出所有。爲什麼這是相關的? – m0skit0