- 浏览: 1008802 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (367)
- JavaScript (23)
- Java (60)
- Python (41)
- 其他 (36)
- SQL (4)
- 开发工具 (26)
- Linux (15)
- AJAX (6)
- Cache (3)
- 正则 (4)
- 架构 (9)
- 手机 (3)
- MySQL (4)
- Android (115)
- vps (1)
- 网站 (4)
- scale (3)
- 搜索引擎 (3)
- iPhone (2)
- hessian (1)
- hessdroid (1)
- 411 (1)
- jstat (1)
- gc (1)
- gallery (1)
- 惯性 (1)
- eclipse (1)
- mac wget error (1)
- miui file explorer 无用 解决办法 (1)
- vim (1)
最新评论
-
qingyezhangluo:
哎。楼主您既然是分享代码的为什么要加密的呢?而且问你密码还不回 ...
android应用换皮肤(转) -
MagicError:
kavoe 写道下载文件有密码。。。。
http抓包工具 -
knightdf:
我先试下再来
JAVA的RAS加密例子 -
kavoe:
下载文件有密码。。。。
http抓包工具 -
changanfounder:
hmc1985 写道setCallbackDuringFlin ...
android gallery滑动惯性问题
由于在Android
中,进程的生命周期大多数时候是由系统管理的;另外也由于手机应用的一些特殊性,所以我们需要更多的去关注各个Android
Component的运行时生命周期模型。(所谓手机应用的特殊性主要是指这样2点: 1.
手机应用的大多数情况下我们只能在手机上看到一个程序的一个界面
,用户除了通过程序界面上的功能按钮来在不同的窗体间切换,还可以通过Back键和Home键来返回上一个窗口,而用户使用Back或者Home的时机是
非常不确定的,任何时候用户都可以使用Home或Back来强行切换当前的界面。 2.
往往手机上一些特殊的事件发生也会强制的改变当前用户所处的操作状态,例如无论任何情况,在手机来电时,系统都会优先显示电话接听界面。)了解这些
Component的生命周期模型一方面是让我们对软件在手机中的运行情况做到心中有数,更重要的,对于程序开发来说,生命周期中的每一个关键事件都会有
我们可以覆写于各种Component对应基类型的事件处理方法,了解各Component的生命周期就是让我们在开发程序时明白我们该怎样去编写各种事
件的处理代码。例如Activity的Create,就会有对应的事件处理函数onCreate,我们可以从Activity基类覆写这个事件处理函数完
成我们需要的相关事件处理:
public class actMain extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
…… //我们的事件处理代码
}
……
}
这篇Post我们就来看看最常用的Activity的运行时生命周期模型(Service的运行时生命周期模型在下一篇讲述了如何启动一个Service并和其通信后再做描述)。 Activity的生命周期模型在Google提供的官方文档上有比较详细的一个图示:
其一共包含7个我们需要关心的关键事件,下面对其分别详细说明(文字中的粗体字表示后文中会经常用到的概念在第一次出现时会给出解释,之后后文不再详细说明):
1. void onCreate(Bundle savedInstanceState)
当Activity被第首次加载时执行。我们新启动一个程序的时候其主窗体的onCreate事件就会被执行。如果Activity被销毁后
(onDestroy后),再重新加载进Task时,其onCreate事件也会被重新执行。注意这里的参数
savedInstanceState(Bundle类型是一个键值对集合,大家可以看成是.Net中的Dictionary)是一个很有用的设计,由于
前面已经说到的手机应用的特殊性,一个Activity很可能被强制交换到后台(交换到后台就是指该窗体不再对用户可见,但实际上又还是存在于某个
Task中的,比如一个新的Activity压入了当前的Task从而“遮盖”住了当前的Activity,或者用户按了Home键回到桌面,又或者其他
重要事件发生导致新的Activity出现在当前Activity之上,比如来电界面),而如果此后用户在一段时间内没有重新查看该窗体(Android
通
过长按Home键可以选择最近运行的6个程序,或者用户直接再次点击程序的运行图标,如果窗体所在的Task和进程没有被系统销毁,则不用重新加载
Process, Task和Task中的Activity, 直接重新显示Task顶部的Activity,
这就称之为重新查看某个程序的窗体),该窗体连同其所在的Task和Process则可能已经被系统自动销毁了,此时如果再次查看该窗体,则要重新执行
onCreate事件初始化窗体。而这个时候我们可能希望用户继续上次打开该窗体时的操作状态进行操作,而不是一切从头开始。例如用户在编辑短信时突然来
电,接完电话后用户又去做了一些其他的事情,比如保存来电号码到联系人,而没有立即回到短信编辑界面,导致了短信编辑界面被销毁,当用户重新进入短信程序
时他可能希望继续上次的编辑。这种情况我们就可以覆写Activity的void onSaveInstanceState(Bundle
outState)事件,通过向outState中写入一些我们需要在窗体销毁前保存的状态或信息,这样在窗体重新执行onCreate的时候,则会通过
savedInstanceState将之前保存的信息传递进来,此时我们就可以有选择的利用这些信息来初始化窗体,而不是一切从头开始。
2. void onStart()
onCreate事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体前已经过去了一段时间,窗体已经执行了onStop
事件,但是窗体和其所在进程并没有被销毁,用户再次重新查看窗体时会执行onRestart事件,之后会跳过onCreate事件,直接执行窗体的onStart事件。
3. void onResume()
onStart事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体时,窗体还没有被销毁,也没有执行过onStop
事件(窗体还继续存在于Task中),则会跳过窗体的onCreate和onStart事件,直接执行onResume事件。
4. void onPause()
窗体被交换到后台时执行。
5. void onStop
()
onPause事件之后执行。如果一段时间内用户还没有重新查看该窗体,则该窗体的onStop
事件将会被执行;或者用户直接按了Back键,将该窗体从当前Task中移除,也会执行该窗体的onStop
事件。
6. void onRestart()
onStop
事件执行后,如果窗体和其所在的进程没有被系统销毁,此时用户又重新查看该窗体,则会执行窗体的onRestart事件,onRestart事件后会跳过窗体的onCreate事件直接执行onStart事件。
7. void onDestroy()
Activity被销毁的时候执行。在窗体的onStop
事件之后,如果没有再次查看该窗体,Activity则会被销毁。
最后用一个实际的例子来说明Activity的各个生命周期。假设有一个程序由2个Activity
A和B组成,A是这个程序的启动界面。当用户启动程序时,Process和默认的Task分别被创建,接着A被压入到当前的Task中,依次执行了
onCreate, onStart,
onResume事件被呈现给了用户;此时用户选择A中的某个功能开启界面B,界面B被压入当前Task遮盖住了A,A的onPause事件执行,B的
onCreate, onStart,
onResume事件执行,呈现了界面B给用户;用户在界面B操作完成后,使用Back键回到界面A,界面B不再可见,界面B的onPause, onStop
,
onDestroy执行,A的onResume事件被执行,呈现界面A给用户。此时突然来电,界面A的onPause事件被执行,电话接听界面被呈现给用
户,用户接听完电话后,又按了Home键回到桌面,打开另一个程序“联系人”,添加了联系人信息又做了一些其他的操作,此时界面A不再可见,其onStop
事
件被执行,但并没有被销毁。此后用户重新从菜单中点击了我们的程序,由于A和其所在的进程和Task并没有被销毁,A的onRestart和
onStart事件被执行,接着A的onResume事件被执行,A又被呈现给了用户。用户这次使用完后,按Back键返回到桌面,A的onPause,
onStop
被执行,随后A的onDestroy被执行,由于当前Task中已经没有任何Activity,A所在的Process的重要程度被降到很低,很快A所在的Process被系统结束。
发表评论
-
android屏幕适配
2012-11-16 17:24 2188屏幕适配一直是一个让人头疼的问题,论坛上讨论这个问题的最后也 ... -
禁止Eclipse中xml文件Run as的XSL Transformation生成out.xml以方便Android应用开发
2012-08-26 21:38 2632可以在Eclipse里面配置,菜单Windows->P ... -
android 自带的主题 theme 的使用
2012-08-25 23:21 2369在android的sdk 安装目录data\r ... -
android 如何判断程序是否在前台运行
2012-04-06 00:04 3096private boolean isTopActiv ... -
用代码如何检测一个android程序是否在运行
2012-04-05 23:07 3736<uses-permission android:na ... -
Android-TextView多行本文滚动轻松实现
2012-03-04 19:37 1314TextView tvAndroid123 = (T ... -
让背景模糊的效果
2012-03-04 16:22 2618设置透明度(这是窗体本身的透明度,非背景) Wi ... -
Android 使用shape
2012-03-04 16:14 1048刚刚翻论坛的时候看到的,总觉得以后会用的上这些零零碎碎 ... -
关于android中使用很多大图片的一些做法
2012-02-29 00:11 1443最近在xoom上开发应用,碰到ui设计都是使用图片,而 ... -
屏幕尺寸和像素密度的资源限定符
2012-02-23 15:31 1603屏幕尺寸和像素密度的资源限定符 以下是可以用来为 ... -
android开发之gallery 实现滚动一张且短距离滑动实现滚动
2011-12-19 18:50 1926首先gallery的特点就不用多说了吧,惯性滚动、半屏翻页,但 ... -
下拉刷新
2011-10-14 15:09 1171要实现这种效果 可以参见这里https://git ... -
android应用换皮肤(转)
2011-10-12 14:36 3195看到好多人在问题与解答里面都问怎么换肤,搜了一下论坛里面好像没 ... -
Android签名到底都有哪些作用?
2011-10-09 17:59 2297所有的Android应用程序都要求开发人员用一个证书进 ... -
Android 动态切换全屏和非全屏模式
2011-10-08 15:15 3470直接贴出代码: Java代码 ... -
Android开发——利用Cursor+CursorAdapter实现界面实时更新(转)
2011-09-20 15:47 3078好久没有更新博客了 ... -
Nginx使用反向代理时 Hessian 的 411 错误解决方案【转】
2011-09-15 13:48 2357问题描述: 用 Hessian 实现 web se ... -
理解 Android 本地数据存储 AP(转)
2011-05-18 14:25 1902样例应用程序 为了突出 Android 应用程序开发的本 ... -
Android 本地数据存储 API(二)(转)
2011-05-18 14:23 1979使用 SQLite 数据库 Android 通过 S ... -
Android 本地数据存储 API(三)(转)
2011-05-18 14:22 2561为私有数据使用设备的内部存储器 有了数据存储 API ...
相关推荐
Activity的生命周期主要分为三个阶段:初始化阶段、运行阶段和销毁阶段。这些阶段通过一系列回调方法来表示,开发者可以在这些方法中插入相应的代码以响应状态变化。 1. 初始化阶段: - onCreate():Activity首次...
Android系统会在内存不足时杀死Activity,因此开发者需要在适当的生命周期方法中保存和恢复状态。例如,`onSaveInstanceState()`用于保存临时状态,`onRestoreInstanceState()`用于恢复。 10. **返回栈(Back ...
Fragment的生命周期与Activity紧密关联,理解Fragment的生命周期对于开发高效、稳定的应用至关重要。 Fragment的生命周期可以分为三个主要阶段:初始阶段、可见性阶段和销毁阶段。 1. **初始阶段** - `onAttach()...
开发者需要根据这些生命周期方法来处理相应的逻辑,确保应用程序运行的稳定性和效率。 在创建Activity时,我们需要在AndroidManifest.xml文件中声明。这是Android系统了解应用程序所有组件的地方。例如: ```xml ...
理解和熟练掌握Activity的生命周期、Intent的使用、Activity间的通信、栈管理、多窗口支持、Activity过渡动画以及配置变化处理,是Android开发者的基本功。通过深入学习和实践,可以创建出更加高效、用户友好的应用...
* Activity 生命周期在启动、打开其他 Activity、关闭、横竖屏切换等情况下会执行不同的生命周期方法 * 在不设置 android:configChanges 属性时,Activity 会销毁并重新创建,而设置了该属性时,只会执行 ...
同时,良好的编程实践是确保所有入口点都能够正确处理Activity的生命周期,比如在onCreate()、onStart()、onResume()等回调方法中进行必要的初始化和状态恢复。 总的来说,“042集-跨进程启动Activity和设置...
Maven是Java项目管理工具,通过定义项目对象模型(POM),Maven可以自动下载依赖、构建项目并管理其生命周期。在这个项目中,会有一个标准的Maven目录结构,包括`src/main/java`(源代码)、`src/main/resources`...
`Activity` 在实现MVC(Model-View-Controller)模型时,主要扮演视图(View)和控制器(Controller)的角色: - **View**:负责展示用户界面。 - **Controller**:处理用户的输入事件,与模型(Model)进行交互。 #### ...
- `activiti-bpmn-converter-5.13-SNAPSHOT.jar`: 负责将BPMN模型文件转换成内部可执行的格式,用于流程的运行时解析。 - `jgraphx-1.10.4.2.jar`: 一个强大的Java图形库,用于绘制流程图,提供丰富的图形和交互...
Activity的生命周期是面试中常考的知识点,包括了onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()等方法。每个方法都有其特定的触发场景,例如onCreate()在Activity首次创建时调用,用于初始...
- **onDetach()**: Fragment与Activity断开连接时调用,标志着生命周期的结束。 在实际应用中,开发者可以在这些生命周期方法中插入适当的逻辑,例如在onCreateView()中设置点击监听器,在onResume()中更新数据,...
3. **Bundle**:在Fragment的生命周期方法(如`onCreateView()`或`onActivityCreated()`)中,可以通过`getArguments()`获取传入的数据,这些数据在Fragment创建时通过`setArguments(Bundle)`方法放入Bundle中。...
`Activity`作为应用程序的基本单元,负责处理用户交互和展示UI,而`Fragment`则可以看作是`Activity`的一部分,它有自己的UI和生命周期,可以在多个`Activity`之间复用。本篇文章将深入探讨如何在`Activity`中有效地...
Intent提供了灵活的组件间通信方式,而Activity Stack模型则规定了Activity的生命周期和导航行为。开发者需要根据应用的需求选择合适的启动模式,同时注意优化Intent的使用,避免因不当操作导致内存泄漏或性能问题。...
Service的生命周期由系统管理,即使在用户离开应用或手机屏幕关闭时,Service仍可以继续运行。 Service与Activity之间的通信主要通过以下几种方式实现: 1. **Binder**: Binder是Android系统中的进程间通信(IPC...