我怎样才能找到阻止我活动的内容

时间:2014-09-04 06:43:47

标签: android wear-os

我有一个单独的活动,有几个片段被随机停止,我正在试图找出原因。类似的问题(Why is my android activity being stopped?)但无关的答案。

活动正在Android Wear上运行,并收集加速计数据。它只会在我移动它时与设备交互时停止,例如点击屏幕。我试过了:

  1. 在摇动设备的情况下禁用方向更改会导致配置更改。
  2. 如果点击被误解为快速滑动以关闭,则会在Wear活动中停用swipeToDismiss
  3. 使用断点覆盖onLowMemory()以检查是否是资源问题。
  4. 如果无意中调用onFinish()
  5. ,请使用断点覆盖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)}

    看起来移动手表会增加计步器步数,这会导致新的信息卡显示在手表的主屏幕上。此卡会中断我的全屏活动并将其关闭。有谁知道防止这种情况的方法?感觉就像一个Wear bug,我不确定其他应用程序是否应该能够中断正在运行的前台应用程序。

    我找到了我的应用程序关闭的原因,但仅仅是由于发送到日志的幸运信息。我仍在寻找原始问题的答案,以便确定Android系统停止应用的原因的一般方法。也许这是不可能的?

1 个答案:

答案 0 :(得分:0)

我对原始问题没有答案,但我对其引起的症状有一个解决方法。我不是将我的应用程序作为全屏活动启动,而是在上下文流中创建一个通知,其中包含一个全屏幕操作。通知是持久的,因此即使其他卡进入流,它们也不会导致我的任务退出。

我在https://code.google.com/p/android/issues/detail?id=75918&thanks=75918&ts=1410235765

提交了此问题的错误

最初的问题仍未解决,但我怀疑它没有答案......