- 浏览: 294342 次
- 性别:
- 来自: 上海
最新评论
-
再_见孙悟空:
写的不错
Dialog -
a549262189:
支持下,正好在学习这块的内容!
Android Gesture Detector -
dcsff:
受教了
LayoutInflater -
庆_啊:
真厉害。
LayoutInflater -
ghj234:
学习了,哈哈
LayoutInflater
Android中,Component(activity、service和broadcast receivers)的生命周期始于其响应一个Intent请求,终于该Component销毁。在这期间,Component可能处于激活/未激活、可见/不可见的状态。
1. Activity堆栈
每个Actvity的状态由它所在Activity栈中的位置所决定,所有当前正在运行的Actvity将遵循照后进先出的原则。当一个新的 Activity启动,当前的Activity将移至堆栈的顶部,如果用户使用Back按钮,或在前台Activity被关闭,下一个Activity将被激活并且移至到堆栈的顶部。这个过程如下图所示:
2. Activity 状态
随着Activity的创建和销毁,也就会进出栈如上图所示,其中可能会经历以下四种状态:
- Active状态:这时候Activity处于栈顶,且是可见的,有焦点的,能够于用户互动。当另一个Activity变成Active时,当前 的将变成Paused状态;
- Paused状态:Activity仍然可见但没有焦点,在这时候Actvity处于Paused状态(例如,如果有一个透明或非全屏幕上的Activity在你的Actvity上面)。处于Paused状态的Actvity是alive的(保持状态、成员信息并绑定到窗口管理器),但当系统内存不足的时候会被killed;
- Stopped状态:当Activity是不可见的时,Activity处于Stopped状态(仍可以保存状态和成员信息,但不绑定在窗口管理器)。假设系统需要内存的话,它是被回收对象的主要候选。当Activity处于Stopped状态时,一定要保存当前数据和当前的UI状态,否则一 旦Activity退出或关闭时,当前的数据和UI状态就丢失了。
- Inactive状态:Activity被杀掉以后或者被启动以前,处于Inactive状态。这时Activity已被移除从Activity堆栈中,需要重新启动才可以显示和使用。
public class MyActivity extends Activity { // 在Activity生命周期开始时被调用 public void onCreate(Bundle icicle) { } // 当activity对用户即将可见的时候调用。 public void onStart() { } // 当activity从停止状态重新启动时调用 public void onRestart() { } // 当activity将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经可以传递给它 public void onResume() { } // 当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用 // CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。 public void onPause() { } // 当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。 public void onStop() { } // 在activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况 public void onDestroy() { } // onCreate完成后被调用,用来回复UI状态 public void onRestoreInstanceState(Bundle savedInstanceState) { } // Activity即将移出栈顶保留UI状态时调用此方法 public void onSaveInstanceState(Bundle savedInstanceState) { } }
OPhone Runtime将首先杀掉处于Stopped状态的Activity,在极端情况下,也会杀掉那些处于Paused状态的Activity。 为确保无缝的用户体验,这些状态之间的过渡对用户来说应该做到透明的。不管Activity处于那种状态,最重要的是保留好UI状态和用户数据,一旦Actvity被激活,用户都能看到他想要的东西。
你后台的Activity被系统回收怎么办:onSaveInstanceState
当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。
savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下Bundle savedInstanceState是否为空。
就像官方的Notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦,没准你需要记住滚动条的位置...
3. Activity周期
(1)完整生命周期:开始于调用onCreate()(初始化的用户界面,分配引用类变量,绑定数据控件,并创建服务和线程),在OnCreate方法的参数Bundle包含最后一次调用onSaveInstanceState保存的UI状态,你可以使用这个Bundle恢复用户界面到以前的状态,无论是在OnCreate方法或通过覆盖onRestoreInstanceStateMethod方法
。为了避免创造短期对象和增加垃圾收集的时间,以致对用户体验产生直接影响,如果你的Activity需要创建一些对象的话,最好在onCreate方法中创建,因为在Actvity的完整生命周期中它仅会被调用一次;结束于调用onDestroy()(释放所有的资源,确保所有外部连接被关闭,例如网络或数据库的连接)。有时,OPhone Runtime将杀掉一个Activity且不调用onDestroy()。
(2)可见生命周期:开始于onStart()结束于onStop()。在这期间此Acitvity是可见的(尽管它可能没有焦点,也可能部分被遮挡着)。OnStop方法用于暂停或停止动画,线程,定时器,服务或其他专门用于更新用户界面程序,当用户界面是再次可见时,使用OnStart(或onRestart)方法来恢复或重新启动这些程序 ,当一个Activity被重现可见时onRestart方法优先于onStart被调用。OnStart / OnStop方法也被用来注册和注销Broadcast Reciever 。在一个Activity完整生命周期中可能会经过几个Activity可见生命周期。在极端情况下,OPhone Runtime将杀掉一个Activity即使它在可见状态并且并不调用onStop方法。
(3)活跃生命周期:始于onResume()方法,结束于onPause()方法。一个活跃的Actvity总是在前台并且接收用户输入事件。因为用户会频繁的从暂停、恢复状态切换(例如,当设备待机或一个新的activity启动的时候onPause()会被调用;当传入一个新的intent进来时onResume()被调用。因此,这2个方法内的代码应该是轻量级的以确保您的应用程序能够快速响应Acitvity在前台和后台之间切换。 在调用onPause之前onSaveInstanceState会被调用保存UI状态(如检查按钮状态,用户焦点,未提交用户输入) ,这个方法提供了一个机会保存当前的UI状态到Bundle当中。 Bundle信息将会被传递到OnCreate和onRestoreInstanceState方法 。
4. Activity生命周期示例
必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示
(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
AAA --> onFreeze() --> onPause() --> onStop() --> onRestart() --> onStart(),onResume() …
(2)用户点击Home,Actvity调用顺序如下
AAA --> onFreeze() --> onPause() --> onStop() -- Maybe --> onDestroy() – Maybe
(3)调用finish(), Activity调用顺序如下
AAA --> onPause() --> onStop() --> onDestroy()
(4)在Activity上显示dialog, Activity调用顺序如下
AAA
(5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
AAA --> onFreeze() --> onPause()
(6)设备进入睡眠状态,Activity调用顺序如下
AAA --> onFreeze() --> onPause()
发表评论
-
如果在Eclipse中debug
2010-05-02 14:15 0最基本的操作是: 1, 首先在一个java文件中设断点,然后 ... -
How to download sourcecode of android with cygwin
2010-04-14 16:07 5077cygwin是一个在windows平台 ... -
TelephoneManager
2010-03-08 16:04 01. protected void onCreate(Bun ... -
eclipse c
2010-03-07 21:05 0Eclipse 除 了可以开发Java之外,还支持了许 ... -
android sdk安装
2010-02-02 23:37 34471.下载:http://developer.android.c ... -
google map my demo
2010-02-02 23:36 3157<uses-library android:name=& ... -
Toast
2010-02-02 23:35 14201. (1) public class ToastActi ... -
如何在MapView上画图
2010-02-02 23:34 1553http://ophone8.com/thread-4340- ... -
Service
2010-02-02 23:33 31091. Service生命周期 (1)Servic ... -
Notification
2010-02-02 23:33 18781. Notification构造器的参数 分别为: ... -
导航相关概念
2010-02-02 23:32 16711. Google Map的定位 (1)Goog ... -
PendingIntent和Intent
2010-02-02 23:28 9488Notification n = new Notificati ... -
Broadcast调用Service做的一个定时器
2010-02-02 23:28 36681. public class AlarmActivity ... -
Broadcast Receiver
2010-02-02 23:27 8654Broadcast Receiver用于接收并处理广播通知(b ... -
LayoutInflater
2010-02-02 23:27 21759一般来讲,我们用LayoutInflater做一件事:infl ... -
Activity文档翻译
2010-02-02 23:26 1539转自:http://www.blogjava.net/m ... -
Intent
2010-01-20 10:51 011 public class MumActivity ex ... -
aidl
2010-01-05 11:24 30221. android进程之间如何通讯呢(在不同的进程中怎样传递 ... -
Gallery 画廊
2009-12-17 20:25 33271. images.xml <?xml ver ... -
Intent中的Flag参数
2009-12-16 18:12 6439Intent i = new Intent(B.this, C ...
相关推荐
Android's Architecture Components 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Android's Architecture Components 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
Android-android-components.zip,Android库的集合,用于构建浏览器或类似浏览器的应用程序。,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性...
android-architecture-components, Android架构组件示例 Android架构组件示例使用架构组件的示例的Collection:聊天室生命周期识别组件ViewModelsLiveData分页( 预览)WorkManager ( alpha )示例BasicSample 显示
Material Components for Android are based on Android’s Design support library (DesignLib) which will continue to be released as part of Android’s SDK. Useful Links All Components Contributing Class...
Developer Android API Components (官网API Components离线PDF)
O2S.Components.PDFView4NET 和 O2S.Components.PDFRender4NET
Android components A collection of Android libraries to build browsers or browser-like applications. ℹ️ For more information see the website. A full featured reference browser implementation based...
Android Architecture Components是Google发布的一套新的架构组件,使App的架构更加健壮。
Android消息总线,基于LiveData,具有生命周期感知能力使用方法Fork本项目或者直接拷贝源码:LiveDataBus.java依赖依赖Android Architecture Components,具体可参见gradle文件build.gradle示例及Demo订阅消息...
Android Architecture Components Read article here Android Architecture Components (AAC) is a new collection of libraries that contains the lifecycle-aware components. It can solve problems with ...
O2S.Components.PDFRender4NET 无水印打印PDF,包含O2S.Components.PDFRender4NET.dll引用文件;直接引用后就可加载打印
O2S.Components.PDFRender4NET最新的版本,并且没有水印
Android Architecture Components samples A collection of samples using the Architecture Components: Room Lifecycle-aware components ViewModels LiveData Samples The Architecture Components and these ...
O2S.Components.PDFRender4NET破解版打印pdf,无水印,c#源码
DPF.Android.Native.Components.v2.8.6XE7控件及修正实例.rar
O2S.Components.PDFRender4NET.dll 真正无水印版,已经测试过,完全可用,能够直接将pdf转化为图片的DLL。并附有Demo,下载直接修改路径就可运行;本人项目就使用这个。
正版O2S.Components.PDFRender4NET,pdf转化成各种格式图片,稳定运行了好几年,基本没有问题,福利。
O2S.Components.PDFRender4NET4.5.1无水印 使用方法 https://blog.csdn.net/zhgl7688/article/details/118330564