2014-09-04 168 views
0

我有一個單一的活動,隨機停止的幾個片段,我試圖找出原因。與此類似的問題(Why is my android activity being stopped?)但無關的答案。我怎樣才能找到什麼是停止我的活動

活動在Android Wear上運行,並收集加速計數據。只有在移動設備的同時與設備交互時纔會停止,如點擊屏幕。我試過了:

  1. 禁用方向更改,以防發生設備抖動導致配置更改。
  2. 關於Wear活動禁用swipeToDismiss以防萬一水龍頭被誤解爲快速滑動關閉。
  3. 覆蓋onLowMemory()帶有斷點以檢查它是否是資源問題。
  4. 重寫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系統停止應用程序的原因。也許這是不可能的?

+1

通過觀察logcat的我覺得有什麼不對您的onStop方法... – Umair 2014-09-04 06:47:36

+0

不,我的onStop只是調用super.onStop()。它只是在那裏放置一個斷點並捕獲活動停止點以獲取堆棧跟蹤。沒有任何異常被拋出。 – Morne 2014-09-04 07:25:27

+0

是不是有任何異常拋出?我想念你的Logcat ... – Anthea 2014-09-04 07:30:45

回答

0

我對我的原始問題沒有答案,但我對由此引起的症狀有解決方法。我不是將我的應用程序作爲全屏活動啓動,而是在上下文流中創建通知,並執行全屏操作。通知是持久的,所以即使其他卡片進入流時,它們也不會導致我的任務退出。

Iv'e提交了錯誤此問題在https://code.google.com/p/android/issues/detail?id=75918&thanks=75918&ts=1410235765

原來的問題仍然開放,但我懷疑它有沒有答案......

+0

傳入的文字信息也會導致你的問題?或者這只是計步器通知彈出? – 2014-09-16 20:07:37

+0

它發生在所有新卡上,而不僅僅是計步器。通過手持設備上的Android Wear應用發送演示卡可輕鬆重現。值得注意的是,我使用'setDisplayIntent()'設置了自定義佈局來創建我的通知,以啓動與我的應用程序關聯的活動並保持活動。 – Morne 2014-09-18 02:29:49