大佬教程收集整理的这篇文章主要介绍了android – Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
进入睡眠模式(按电源按钮)
17.005:E / MotherActivity(28940):onPause调用
17.025:E / MotherActivity(28940):onStop调用
17.315:E / MotherActivity(28940):onDestroy调用
17.365:E / GameTuto1Activity(28940):@L_697_2@mainActivity构造函数
17.365:E / MotherActivity(28940):onCreate调用
17.695:E / MotherActivity(28940):onStart调用
17.705:E / MotherActivity(28940):onResume调用
17.705:E / MotherActivity(28940):onPause被叫
在解锁手机时从睡眠模式回来
755:E / MotherActivity(28940):onResume调用
935:E / MotherActivity(28940):onPause调用
935:E / MotherActivity(28940):onStop调用
然后电话就会响起,直到我杀了这个过程.但是为什么我在恢复我的应用程序(从睡眠模式回来)时会经历onPause和onStop以及为什么onCreate,OnStart,onResume,onPause在进入睡眠模式时?
如果我对Nexus7做同样的事情,它就不会发生,生命周期是“正常的”.日志如下:
进入睡眠模式(按电源按钮)
43.782:E / MotherActivity(19876):onPause调用
43.822:E / MotherActivity(19876):onStop调用
在解锁手机时从睡眠模式回来
50.142:E / MotherActivity(19876):onRestart调用
50.142:E / MotherActivity(19876):onStart调用
50.172:E / MotherActivity(19876):onResume调用
问题是奇怪的和错误的(也许),但答案可能非常聪明.
如果你有想法?
它只发生在我有3个线程的项目中:2个循环线程(我在onPause中杀死)和一个由PoolExecutor管理的线程(在onPause中也被杀死).如果我做一个简单的应用程序,它不会被复制.
Nexus5版本= 4.4.2,nexus7版本= 4.2.2
我知道,这个问题没有代码,我无法分享我的项目.
但是,提前感谢所有想起这个问题的人.
马蒂亚斯
….
5个小时后:A导致答案
……
在我的活动清单中,我有:
<activity android:name=".MainActivity" android:label="@String/title_activity_main" **android:screenOrientation="landscape"** android:theme="@android:style/Theme.NotitleBar.Fullscreen" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
如果我删除android:screenOrientation =“landscape”,它只是工作正常.
为什么会发生这种情况?为什么我不能将我的方向设置为横向并忘记configurationChange事件.
最糟糕的是,如果我听取方向配置改变了:
android:configChanges="orientation"
没有调用onConfigurationChanged方法!!!但如果我使用:
机器人:configChanges = “方向|屏幕尺寸”
并覆盖onConfiguration它的工作原理….
为什么在地球上,screenOrientation = landscape无法处理screenSize配置更改.有没有另一种干净的方法来处理这个混乱,只是对系统说,“当我把我的手机置于睡眠模式时,我在横向模式下的人不会把我搞砸为肖像”.
如果有人在这里知道,谢谢你的回答.
否则,这意味着如果您希望您的应用程序是纵向或横向,您需要将android:configChanges =“Orientation | screenSize”添加到清单中并覆盖Activity中的onConfigurationChanged(不执行任何操作). OO”
解
这意味着,在HoneyComb之后(因为慧聪网开始使用screenSizE),如果在你的清单中,你使用的是
android:screenOrientation="landscape"
您还需要在清单中包含以下这一行:
android:configChanges="orientation|screenSize"
在您的MotherActivity(您的活动继承的那个)或您的活动中,您必须以这种方式覆盖配置更改方法:
/* * (non-JavadoC) * @see android.app.Activity#onConfigurationChanged(android.content.res.Configuration) */ @Override public void onConfigurationChanged(Configuration newConfig) { Log.e("MotherActivity","onConfigurationChanged called "); // this method is there to ensure no configuration changes when going to sleep mode // because the device wants my app to go on porTrait @R_197_6296@en fire screenSize changes // sometime some montainview code sucks super.onConfigurationChanged(newConfig); // and of course do nothing !!! }
可以看看这里是为了更好地理解onConfigurationChange以及如何处理它.@ http://developer.android.com/guide/topics/resources/runtime-changes.html
回到我的问题
在我的情况下,由于没有预期的配置更改,我正在与丢失的线程作斗争.
简单的技巧n°1
因此,避免这种痛苦并快速检测它的简单方法是在开发模式下将Log添加到您的Mother活动中.因此,在测试时,您始终可以记录活动的生命周期.它将帮助您避免生命周期的混乱.
例:
/* * (non-JavadoC) * @see android.app.Activity#onCreate(android.os.bundlE) */ @Override protected void onCreate(Bundle savedInstanceStatE) { Log.e("MotherActivity","onCreate called"); super.onCreate(savedInstanceStatE); }
线程法
最后,总是,我的意思是总是,深入了解你的线程(如果你有的话)并确保没有内存泄漏(线程必须死掉)并确保你的线程被保留(onRetainNonConfigurationInstance或使用没有GUI的片段和setRetainInstance(true))当配置更改或确保处理配置更改时.
简单的技巧n°2
另外一个技巧也是监听mcc和mnc(在你的清单android:configChanges =“Orientation | screenSize | mcc | mcn”),因为你的应用程序大部分时间都不关心改变电信操作符.而且大多数时候你没有测试那个案例.
祝大家度过愉快的一天!
以上是大佬教程为你收集整理的android – Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕全部内容,希望文章能够帮你解决android – Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。