【发布时间】:2016-03-13 21:53:20
【问题描述】:
我尝试实现录音应用。我对Activity life cycle 有疑问。一段时间后(5 分钟、25 分钟、27 分钟……不同)“某事”调用Activity 的onPause 方法。这对我来说是个问题,因为我有一些版本(Camera、recording、GPS 等)。当我以onPause 方法评论所有版本时,一切正常,我可以录制超过 60 分钟。没有人触摸设备。
我可以获取信息吗,谁是调用者 onPause 方法?
编辑:
我尝试了没有任何逻辑的新创建的应用程序,并且也调用了onPause(20 分钟后)。我认为,这个问题不适用。我有设备华为荣耀 4C,Android 5.1.1 和 EMUI 3.1。也许设备有一些“看门狗逻辑”。
编辑2:
我尝试(使用华为)使用原生相机应用程序录制,15 分钟后自动停止。 (SD 卡未满,文件不大于 4GB (FAT32))。
我尝试(使用 Nexus)并且应用程序运行超过 60 分钟。无需调用 onPause。
已解决:这取决于设备。
我已启用wakeLock(我在清单中拥有 WAKE_LOCK 权限。):
//KEEP SCREEN ON
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();
结构:
Activity (MediaProjectionActivity4 class)
|
| -- Thread of recording video (ScreenRecorder class)
| -- Thread of recording audio (AudioThread class)
| -- Thread of writing to file (SyncFile class)
添加后:Log.e(TAG, "onPause()", new RuntimeException()); 到 onPause 方法。 (12 分钟后调用 onPause)。我在没有过滤的情况下添加了 LogCat 调用 onPause 的前后日志消息。
03-16 16:14:14.600 25668-25668/com.example.mytestapp I/MainActivity: onCreateOptionsMenu()
03-16 16:40:40.770 25668-25668/com.example.mytestapp E/MainActivity: onPause()
java.lang.RuntimeException
at com.example.mytestapp.MainActivity.onPause(MainActivity.java:97)
at android.app.Activity.performPause(Activity.java:6225)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1321)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3510)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3483)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3453)
at android.app.ActivityThread.access$1400(ActivityThread.java:163)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1386)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5595)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
03-16 16:40:40.810 25668-25668/com.example.mytestapp I/MainActivity: onResume()
03-16 17:10:41.560 25668-25668/com.example.mytestapp E/MainActivity: onPause()
java.lang.RuntimeException
at com.example.mytestapp.MainActivity.onPause(MainActivity.java:97)
at android.app.Activity.performPause(Activity.java:6225)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1321)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3510)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3483)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3453)
at android.app.ActivityThread.access$1400(ActivityThread.java:163)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1386)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5595)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
03-16 17:10:41.590 25668-25668/com.example.mytestapp I/MainActivity: onResume()
03-16 17:40:42.360 25668-25668/com.example.mytestapp E/MainActivity: onPause()
java.lang.RuntimeException
at com.example.mytestapp.MainActivity.onPause(MainActivity.java:97)
at android.app.Activity.performPause(Activity.java:6225)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1321)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3510)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3483)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3453)
at android.app.ActivityThread.access$1400(ActivityThread.java:163)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1386)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5595)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
03-16 17:40:42.390 25668-25668/com.example.mytestapp I/MainActivity: onResume()
【问题讨论】:
-
要么您的用户启动另一个活动,点击主页或返回按钮,要么您让屏幕关闭(屏幕关闭触发 onPause)。
-
我更新了帖子。没有人触摸设备,屏幕一直处于开启状态。
-
您能否在
onPause()中Log.e(tag, msg, new RuntimeException());看看除了android.app.Activity.performPause之外是否还有其他来电者?
标签: android android-activity android-lifecycle onpause