我怎样才能找到什么是停止我的活动

问题描述:

我有一个单一的活动,随机停止的几个片段,我试图找出原因。与此类似的问题(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

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

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