我对Android很新,我想了解活动生命周期。 Android开发者网站上的文档非常适用于此,但我希望看到生命周期的实际效果。
所以,我创建了一个新的简单项目,在主要活动中,我覆盖了方法onCreate()
,onDestroy()
,onStart()
,onStop()
,onResume()
和onPause()
并为每一个添加一个日志语句。
然后,我启动模拟器并打开应用程序,更改方向,切换到另一个应用程序等等,然后查看日志语句以查看发生了什么。
我注意到奇怪的行为。例如:我第一次启动应用程序:
02-21 10:22:32.470 I/MainActivity( 2114): onCreate called.
02-21 10:22:32.520 I/MainActivity( 2114): onStart called.
02-21 10:22:32.520 I/MainActivity( 2114): onResume called.
这就是我的预期,很好。 然后,我打开 recents apps 切换器。
02-21 10:24:01.520 I/MainActivity( 2114): onPause called.
02-21 10:24:01.520 I/MainActivity( 2114): onStop called.
我切换回来:
02-21 10:24:26.050 I/MainActivity( 2114): onStart called.
02-21 10:24:26.050 I/MainActivity( 2114): onResume called.
到目前为止,这么好。然后,我再次打开应用程序切换器:
02-21 10:24:31.670 I/MainActivity( 2114): onStop called.
这里变得奇怪了。 onPause()
在哪里?在我看来,在调用onStop()
之前,必须调用此方法。
这些日志消息是示例,有时行为略有不同,并不总是可预测的。但总是缺少一些日志声明。
我用Google搜索并发现了一些关于“旋转”日志的信息。我的问题是:我不明白为什么很难获得所有日志语句。期。也许存在一些技术障碍,但从开发人员的角度来看,在了解新的生态系统时,这只是令人沮丧。
我在这里遗漏了什么吗?是否有一个简单的解决方案来获取所有日志条目?
答案 0 :(得分:0)
来自https://developer.android.com/reference/android/util/Log.html:
提示:当您拨打电话时不要忘记
Log.v(TAG, "index=" + i);
当你构建字符串以传递给Log.d时,编译器 使用StringBuilder并且至少发生三次分配: StringBuilder本身,缓冲区和String对象。 实际上,还有另一个缓冲区分配和复制,以及 对gc的压力更大。这意味着如果您的日志消息是 过滤掉了,你可能正在做重要的工作和招致 显着的开销。
来自:http://developer.android.com/tools/debugging/debugging-log.html#filteringOutput
每条Android日志消息都有一个标记和与之关联的优先级。
- 日志消息的标记是一个短字符串,表示消息来自的系统组件(例如,“View”for 视图系统)。
- 优先级是以下字符值之一,从最低优先级到最高优先级排序:
- V - 详细(最低优先级)
- D - 调试
- 我 - 信息
- W - 警告
- E - 错误
- F - 致命
- S - 无声(最高优先级,无需打印任何内容)
您可能需要查看: