[英]Android “something” call onPause of Activity during running
我尝试实现录音应用。 我对Activity life cycle
有Activity life cycle
。 一段时间(5分钟,25分钟,27分钟……不同)之后,“某物”调用了Activity
onPause
方法。 这对我来说是个问题,因为我发布了一些版本( Camera
, recording
, GPS
等)。 当我用onPause
方法注释所有发行版时,一切正常,我可以录制60分钟以上。 没人触摸设备。
我可以获取信息吗,谁是onPause方法的调用者?
编辑:
我尝试了没有逻辑的新创建的应用程序,并且也调用了onPause
(20分钟后)。 我认为,该问题已不适用。 我有设备Huawei Honor 4C,Android 5.1.1 with 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
方法。 (onPause在12分钟后被调用)。 我通过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()
Android负责在Activity上调用所有生命周期方法。 当活动不再获得输入焦点时调用它,这意味着可能在其上方显示其他内容,例如对话框。 您可以在此处阅读有关该方法和其他生命周期方法的文档。
可能有几种原因,但是可以通过使应用程序不进入睡眠状态来阻止onPause
的调用。
你可以设置
setKeepScreenOn(true)
在涉及的观点上,这也将起作用
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.