我有一個單一的活動,隨機停止的幾個片段,我試圖找出原因。與此類似的問題(Why is my android activity being stopped?)但無關的答案。我怎樣才能找到什麼是停止我的活動
活動在Android Wear上運行,並收集加速計數據。只有在移動設備的同時與設備交互時纔會停止,如點擊屏幕。我試過了:
- 禁用方向更改,以防發生設備抖動導致配置更改。
- 關於Wear活動禁用
swipeToDismiss
以防萬一水龍頭被誤解爲快速滑動關閉。 - 覆蓋
onLowMemory()
帶有斷點以檢查它是否是資源問題。 - 重寫
onFinish()
在一個unintentionall呼叫的情況下斷點finish()
活動從服務開始
Intent startIntent = new Intent(this, WearActivity.class);
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startIntent);
設置爲android:launchMode="singleTask"
活動,但只有一個啓動請求。
我已經用完了想法。有什麼方法可以確定誰發送停止消息?下面是一個完整的堆棧跟蹤,所述活性是通過接收STOP_ACTIVITY_HIDE
系統消息中ActivityThread.handleMessage()
停止:
at myRandomApp.WearActivity.onStop(WearActivity.java:76)
at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1212)
at android.app.Activity.performStop(Activity.java:5387)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3196)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3245)
at android.app.ActivityThread.access$1100(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5026)
at java.lang.reflect.Method.invokeNative(Method.java:-1)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(NativeStart.java:-1)
編輯:
響應於一些註釋,不是由異常產生上述棧跟蹤拋出。這就是我在哪裏打斷點,以查看導致應用程序停止的通話歷史記錄。該應用程序乾淨地退出,我試圖找出它爲什麼要退出。
更新: 我終於找到了罪魁禍首。不變的是,我的應用程序關閉之前,我在前面得到這片刻的日誌輸出:
I/ActivityManager﹕ START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.google.android.wearable.app/com.google.android.clockwork.home.HomeActivity (has extras)}
看來手錶移約增加了計步器步數,這將導致新的信息卡中顯示在手錶的主屏幕上。此卡會中斷我的全屏活動並關閉它。有誰知道一種方法來防止這種情況?這感覺就像一個磨損bug,我不確定其他應用程序應該能夠中斷正在運行的前臺應用程序。
我發現我的應用程序關閉的原因,但只是由於發送到日誌的信息的幸運位。我仍然在尋找對原始問題的回答,以確定Android系統停止應用程序的原因。也許這是不可能的?
通過觀察logcat的我覺得有什麼不對您的onStop方法... – Umair 2014-09-04 06:47:36
不,我的onStop只是調用super.onStop()。它只是在那裏放置一個斷點並捕獲活動停止點以獲取堆棧跟蹤。沒有任何異常被拋出。 – Morne 2014-09-04 07:25:27
是不是有任何異常拋出?我想念你的Logcat ... – Anthea 2014-09-04 07:30:45