您的位置:首页 > 移动开发 > Android开发

android学习日记(1) -- Activity生存周期

2011-11-17 14:55 239 查看
1. Android 应用程序可有多个入口 ,而没有main()函数(可在AndroidManifest.xml中指派主Activity);

2. Intent:

——需要执行的动作(action):常用的动作类型在Intent类中定义,如ACTION_MAIN(用于描述Activity的主要入口), ACTION_EDIT(用于的将Uri 和待编辑数据连接起来);

——需要处理的数据(data):

Intent Action 类型和 Uri 对象可用于指定“动作/数据”对

Intent 也可用于传送数据, Intent 的 Extras 属性存储于Bundle 对象中:

Intent intent = new Intent(this, MyActivity.class);

intent.putExtra("SomeStringData", "Foo");

intent.putExtra("SomeBooleanData", false);

对这些附加信息的键名需要包含一个包前缀: com.androidbook.Multimedia.SomeStringData。

3. 启动Activity的不同方法:

1) 使用类名运行: startActivity(android.content.Intent intent), 如 startActivity(new Intent(getApplicationContext(), MyDrawActivity.class)), 其中Intent也可用于在Activity间传送数据;

2) 运行其它应用程序的Activity: 如

Uri number = Uri.parse(tel:55551212);

Intent dial = new Intent(Intent.ACTION_DIAL, number);

startActivity(dial);

4. Activity 的生存周期:

1) 同一时间只能有一个活动的Activity处于前台;

2) Android 利用栈来对Activity 进行跟踪,新的Activity启动时,处于栈顶的Activity 会被中断,然后新的Activity 被放入栈顶,当它完成时,原来的Activity 又回到栈顶;

3) 使用Activity回调管理应用程序状态和资源:

_在onCreate()中初始化静态Activity 数据: onCreate(Bundle)在Activity 首次运行时调用(首次调用时Bundle为空,因被killed之后再次调用则传入一个记录先前状态的Bundle对象)

_在onResume()中初始化和接收Activity 数据: 当Activity 到达栈顶时,onResume()方法被调用(onResume()方法非常适合于启动音频、视频和动画);

_在onPause()中停止、保存和释放Activity数据: 当一个新的Activity 被移到栈顶时,当前Activity (须停止)会接收到它被下移的通知,同时onPause()被调用。如 在onPause()中activity 需终止在onResume() 方法中播放所有音频、视频和动画,且还要解除(deactivate)某些资源(避免死锁);


注: onPause()是Activity 在后台最后一次能够有机会进行清理工作、释放无需资源的地方。 一般而言,所有在onResume()中获取的资源和数据均需要在onPause()方法中释放,否则线程被终止时资源不能被很好释放。

_避免Activity对象被销毁: 低内存资源时不处于前台的Activity 可能被销毁,因此其对应的 onStop() 和onDestroy() 都可能不被调用,因此一定要在onPause()方法中尽可能多地释放无用资源,避免被销毁。同时可利用实现Bundle并利用onSaveInstanceState()方法将Activity 在终止时保存至一个Bundle对象中,从而可以在再一次onCreate()时利用已存的Bundle
进行恢复(状态读取会在onStart()中进行);

_在onDestroy()中销毁静态Activity数据: 两种情况下被调用 。 1. Activity自然完成其生存周期;2. 由于资源占用原因被操作系统终止。

4) Activity 间跳转的不同:

_有一些Activity 可能调用一次后不再显示(如欢迎动画), 即无法利用返回键返回,可用startActivity()方法和适当的finish();

_另一些Activity 则需记录其path, 可用startActivityForResult()和onActivityResult();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: