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