对于想了解AndroidWear:它如何在活动生命周期中发挥作用?的读者,本文将提供新的信息,我们将详细介绍activity活动生命周期,并且为您提供关于AndroidActivity生命周期中onS
对于想了解Android Wear:它如何在活动生命周期中发挥作用?的读者,本文将提供新的信息,我们将详细介绍activity活动生命周期,并且为您提供关于Android Activity 生命周期中onStart()和onResume()的区别、Android Activity 生命周期中的后退按钮、android – Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕、android – onPause()之前onStopped()在活动生命周期中的有价值信息。
本文目录一览:- Android Wear:它如何在活动生命周期中发挥作用?(activity活动生命周期)
- Android Activity 生命周期中onStart()和onResume()的区别
- Android Activity 生命周期中的后退按钮
- android – Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕
- android – onPause()之前onStopped()在活动生命周期中
Android Wear:它如何在活动生命周期中发挥作用?(activity活动生命周期)
我制作了一个带有活动的可穿戴应用.
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i("WEAR", "CREATE");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setonLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
mTextView = (TextView) stub.findViewById(R.id.text);
}
});
SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor hrs = sm.getDefaultSensor(Sensor.TYPE_HEART_RATE);
sm.registerListener(hrListener, hrs, 3);
if (savedInstanceState != null) {
Log.i("WEAR", "RESTORE");
// ... get prevIoUs sensor data from the bundle
}
}
@Override
protected void onStop() {
Log.i("WEAR", "STOP");
super.onStop();
sm.unregisterListener(hrListener, hrs);
}
@Override
protected void onDestroy() {
Log.i("WEAR", "DESTROY");
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
Log.i("WEAR", "SAVE");
// ... save sensor data in the bundle
super.onSaveInstanceState(savedInstanceState);
}
private SensorEventListener hrListener = new SensorEventListener() {
@Override
public void onSensorChanged(final SensorEvent event) {
final float hearRate = event.values[0];
Log.i("SENSOR", hearRate);
mTextView.setText(Float.toString(hearRate));
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
启动时,我会看到来自传感器的数据流.
片刻之后,屏幕返回到时钟表面,并且日志在我的应用程序调试流程中显示“ STOP”和“ SAVE”.我重新启动了该应用程序,但捆绑包为空,丢失了所有保存在捆绑包中的数据. onDestroy从未被调用过,为什么我没有得到任何捆绑包?
这是一个Gear Live.
解决方法:
关闭磨损应用的动作应从左向右滑动以将其关闭.您将看到onDestroy被调用.
如果您仅按一下按钮(我只有moto 360第一代,即侧面按钮),就好像将应用程序置于前台.因此,仅调用了onStop和onStart对.希望这个较晚的答案对您有所帮助.
Android Activity 生命周期中onStart()和onResume()的区别
<div id="cnblogs_post_body"><p><span>首先了解Activity的四种状态</span></p> <p>Running状态:一个新的Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。<br>Paused状态:当Activity被另一个透明或者Dialog样式的<span>Activity</span>覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,它仍然可见,但它已经失去了焦点,故不可与用户交互。<br>Stopped状态:当Activity不可见时,Activity处于Stopped状态。当Activity处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了。<br>Killed状态:Activity被杀掉以后或者被启动以前,处于Killed状态。这是Activity已从Activity堆栈中移除,需要重新启动才可以显示和使用。</p> <p>4种状态中,Running状态和Paused状态是可见的,Stopped状态和Killed状态时不可见的。</p> <p> </p> <p>onStart()和onResume()的区别</p> <p>onStart()是activity界面被显示出来的时候执行的,用户可见,包括有一个activity在他上面,但没有将它完全覆盖,用户可以看到部分activity但不能与它交互<br>onResume()是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。</p> <p><br>onStart()通常就是onStop()(也就是用户按下了home键,activity变为后台后),之后用户再切换回这个activity就会调用onRestart()而后调用onStart()<br>onResume()是onPause()(通常是当前的acitivty被暂停了,比如被另一个透明或者Dialog样式的<span>Activity</span>覆盖了),之后dialog取消,activity回到可交互状态,调用onResume()。</p> <p><img src="https://images2015.cnblogs.com/blog/675009/201607/675009-20160713164310482-1794150758.png" alt=""></p> <p> </p> <p>引申:经测试,onPause()方法在弹出Dialog时不会被调用,而在被另一个透明或者Dialog样式的Activity覆盖时才会被调用。</p> <p>参考:<a href="http://www.jcodecraeer.com/a/anzhuokaifa/developer/2013/0715/1439.html" target="_blank">Activity的生命周期之Pause(暂停)和Resume(重新返回)</a></p> <p><img title="Activity生命周期" src="D:\activity_lifecycle" alt="activity_lifecycle"></p> <p>附Activity生命周期</p> <p><img src="https://images2015.cnblogs.com/blog/675009/201607/675009-20160713164151842-1620929141.png" alt=""></p> <p> </p></div>
Android Activity 生命周期中的后退按钮
“概览”按钮显示最近任务列表。即使应用程序中的所有活动都已完成(即:它们都没有运行或处于活动状态),Android 仍会在最近的任务列表中记住这一点。这就是该应用显示在列表中的原因。
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):调用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”
解决方法
实际上,当“Nexus 5进入睡眠模式”和“活动”处于“肖像”状态时,它不是“方向”改变(在我的情况下),而是“screenSize已更改”,作为configurationChange事件触发.在Nexus 7上没有发生这种情况,因为它的正常模式在进入睡眠时是风景,因此不会触发configurationChange.
解
这意味着,在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 and then 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 – onPause()之前onStopped()在活动生命周期中
在Andoid Acitivity生命周期中,为什么活动在进入onStopped()之前会经历onPause()?为什么国家不能直接进入onStopped()?
解决方法:
因为documentation这么说:-)
这是有道理的.应用程序已打开,用户按下主页按钮:onPause()被调用.一段时间后,系统需要内存并关闭应用程序:onStop()被调用.
今天关于Android Wear:它如何在活动生命周期中发挥作用?和activity活动生命周期的分享就到这里,希望大家有所收获,若想了解更多关于Android Activity 生命周期中onStart()和onResume()的区别、Android Activity 生命周期中的后退按钮、android – Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕、android – onPause()之前onStopped()在活动生命周期中等相关知识,可以在本站进行查询。
本文标签: