Android做了一年了,回头来看看Activity
2014-08-31 15:02
288 查看
Activity跳转主要有两种方式,如下所示:
其实精华,在这里,onResume,才是安卓程序员实际操作的东东。^_^
命周期的每一个阶段都表示为金字塔上的一个台阶,当系统创建一个新的activity时,每一个回调函数都把activity的状态向上挪一步。
金子塔的最顶层就是activity运行在前景模式下,就是直接运行的状态。
当用户离开activity时,系统调用另一些回调函数,将activity的状态从金字塔中一步一步移下来。有些情况下,activity只移动一部分,并没有完全到底,这些情况下仍然可以移动回顶部。
注意这些状态中只有三个状态是静态(static)的,意味着activity只有在这三个状态下能停留一段时间:
Resumed:foreground,用户可交互running state
对于fragment的初始化,比如读取本地数据库操作,我们可以放在这里进行
Paused:部分被遮挡,不能接收用户输入也不能执行代码,另一个半透明或者小的activity正挡在前面。
弹出日历,popupwindow,活着对话框型的activity。
Stopped:activity完全被遮挡,不能被用户看到,activity被认为在background,当Stopped的时候,activity实例的状态信息被保留,但是不能执行任何代码。
启动新的acitivity,或全屏对话框,全屏的activity。stop还不至于被destroy,所以onKeyDown中,判断KeyCode_Back之后,可以进行对应的reStart操作。
其他状态都是转换状态,系统会很快调用其他相应的回调函数离开这些状态。比如系统调用onCreate()之后,会很快调用onStart(),之后是 onResume()。
还有比如当启动和退出Dialog时,Activity的状态始终未变,可见,Dialog实际上属于Acitivity内部的界面,不会影响Acitivty的生命周期。
1. 两个Activity之间普通跳转
从一个Activity跳至另一个Activity,需要用到Intent 这个东东,
2. 从源Activity跳转至目标Activity,目标Activity再回传值给源Activity
在Activity跳转中,如果需要Activity的回传值,再进行其他操作,怎么实现呢?
1). 源Activity重写onResume()方法
这种方式一般情况下是不推荐,但是针对一些特殊情况推荐使用,毕竟android中Activity跳转时,一般接收的是值类型的信息,这个方法可以更全面的接收回传的信息。这个就不做解释了,做项目时用过,还比较好用,就是代码写的时候会相对复杂些。
2). 源Activity重新onActivityResult()方法
这种方式还是推荐使用的,通过重写onActivityResult()方法,可以方便的接收目标Activity的回传值,关键是注意Activity跳转的方式,源Activity跳转至目标Activity采用startActivityForResult()方法,而目标Activity关闭跳会源Activity时采用setResult()方法。
这里要实现,当前页面,选中地址的那个布局,点击后跳转到地址列表的activity,在地址列表的activity,选中一项之后,直接返回地址数据。
Demo代码如下:
代码片段
第一个activity中
case R.id.score_no_address_layout:
if (userEntity != null) {
Intent intent2 = new Intent(this, MeAddressActivity.class);
intent2.putExtra(KEY, VALUE);
startActivityForResult(intent2, 2);
} else {
getUser();
}
第一个activity中
接受第二个activity传回的值,重写onActivityResult()
// 通过结果码,将地址页面选定的地址,返回到订单结算页
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
super.onActivityResult(arg0, arg1, arg2);
if (arg1 == RESULT_OK) {
address = (MeAddressEntity) arg2
.getSerializableExtra(MeAddressActivity.ADDRESS);
setUserAddress(address);
scoreErrorLogText.setVisibility(View.GONE);
}
}
而在地址列表的activity中,这么发送的
//一个自定义的listview的监听器
class ItemClick implements OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
//获得点击的item的实体
MeAddressEntity entity = (MeAddressEntity) mAdapter.getItem(position);
if(entity!=null){
Intent intent = new Intent();
//将序列化的实体,放入intent
intent.putExtra(ADDRESS, (Serializable)entity);
MeAddressActivity.this.setResult(RESULT_OK, intent);
MeAddressActivity.this.finish();
MeAddressActivity.this.overridePendingTransition(R.anim.activity_back_input,
R.anim.activity_back_out);
}
}
3.几个非常有用的方法
a,.onFocusChanged却只能在View中重写。该方法是焦点改变的回调方法,当某个控件重写了该方法后,当焦点发生变化时,会自动调用该方法来处理焦点改变的事件。
比如当我们为了获取组件的宽度,就要在这个方法中使用。
b,onResume()下一个activity被关闭,返回当前activity时候,可以在这里刷新数据。
c,onDestroy(),清空缓存,比如照片缓存,(当然,现在都不清空了,360没事就把你干了)
其实精华,在这里,onResume,才是安卓程序员实际操作的东东。^_^
命周期的每一个阶段都表示为金字塔上的一个台阶,当系统创建一个新的activity时,每一个回调函数都把activity的状态向上挪一步。
金子塔的最顶层就是activity运行在前景模式下,就是直接运行的状态。
当用户离开activity时,系统调用另一些回调函数,将activity的状态从金字塔中一步一步移下来。有些情况下,activity只移动一部分,并没有完全到底,这些情况下仍然可以移动回顶部。
注意这些状态中只有三个状态是静态(static)的,意味着activity只有在这三个状态下能停留一段时间:
Resumed:foreground,用户可交互running state
对于fragment的初始化,比如读取本地数据库操作,我们可以放在这里进行
Paused:部分被遮挡,不能接收用户输入也不能执行代码,另一个半透明或者小的activity正挡在前面。
弹出日历,popupwindow,活着对话框型的activity。
Stopped:activity完全被遮挡,不能被用户看到,activity被认为在background,当Stopped的时候,activity实例的状态信息被保留,但是不能执行任何代码。
启动新的acitivity,或全屏对话框,全屏的activity。stop还不至于被destroy,所以onKeyDown中,判断KeyCode_Back之后,可以进行对应的reStart操作。
其他状态都是转换状态,系统会很快调用其他相应的回调函数离开这些状态。比如系统调用onCreate()之后,会很快调用onStart(),之后是 onResume()。
还有比如当启动和退出Dialog时,Activity的状态始终未变,可见,Dialog实际上属于Acitivity内部的界面,不会影响Acitivty的生命周期。
1. 两个Activity之间普通跳转
从一个Activity跳至另一个Activity,需要用到Intent 这个东东,
2. 从源Activity跳转至目标Activity,目标Activity再回传值给源Activity
在Activity跳转中,如果需要Activity的回传值,再进行其他操作,怎么实现呢?
1). 源Activity重写onResume()方法
这种方式一般情况下是不推荐,但是针对一些特殊情况推荐使用,毕竟android中Activity跳转时,一般接收的是值类型的信息,这个方法可以更全面的接收回传的信息。这个就不做解释了,做项目时用过,还比较好用,就是代码写的时候会相对复杂些。
2). 源Activity重新onActivityResult()方法
这种方式还是推荐使用的,通过重写onActivityResult()方法,可以方便的接收目标Activity的回传值,关键是注意Activity跳转的方式,源Activity跳转至目标Activity采用startActivityForResult()方法,而目标Activity关闭跳会源Activity时采用setResult()方法。
这里要实现,当前页面,选中地址的那个布局,点击后跳转到地址列表的activity,在地址列表的activity,选中一项之后,直接返回地址数据。
Demo代码如下:
代码片段
第一个activity中
case R.id.score_no_address_layout:
if (userEntity != null) {
Intent intent2 = new Intent(this, MeAddressActivity.class);
intent2.putExtra(KEY, VALUE);
startActivityForResult(intent2, 2);
} else {
getUser();
}
第一个activity中
接受第二个activity传回的值,重写onActivityResult()
// 通过结果码,将地址页面选定的地址,返回到订单结算页
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
super.onActivityResult(arg0, arg1, arg2);
if (arg1 == RESULT_OK) {
address = (MeAddressEntity) arg2
.getSerializableExtra(MeAddressActivity.ADDRESS);
setUserAddress(address);
scoreErrorLogText.setVisibility(View.GONE);
}
}
而在地址列表的activity中,这么发送的
//一个自定义的listview的监听器
class ItemClick implements OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
//获得点击的item的实体
MeAddressEntity entity = (MeAddressEntity) mAdapter.getItem(position);
if(entity!=null){
Intent intent = new Intent();
//将序列化的实体,放入intent
intent.putExtra(ADDRESS, (Serializable)entity);
MeAddressActivity.this.setResult(RESULT_OK, intent);
MeAddressActivity.this.finish();
MeAddressActivity.this.overridePendingTransition(R.anim.activity_back_input,
R.anim.activity_back_out);
}
}
3.几个非常有用的方法
a,.onFocusChanged却只能在View中重写。该方法是焦点改变的回调方法,当某个控件重写了该方法后,当焦点发生变化时,会自动调用该方法来处理焦点改变的事件。
比如当我们为了获取组件的宽度,就要在这个方法中使用。
b,onResume()下一个activity被关闭,返回当前activity时候,可以在这里刷新数据。
c,onDestroy(),清空缓存,比如照片缓存,(当然,现在都不清空了,360没事就把你干了)
相关文章推荐
- 回头看看
- 匆匆的时候忘不了回回头,看看自己走过的地方我留下了什么。
- 回头看看, UserControl 问题多多.
- Android基础 - 对话框和浮动Activity
- Android(OPhone) 学习笔记 - Intent和Activity(3)
- Android(OPhone) 学习笔记 - Intent和Activity
- Android开发入门(五)之界面Activity之间的跳转
- Android中Activity的生命周期
- Android基础 - 对话框和浮动Activity
- 在STL/MFC里的链表类强大支持下,回头看看曾经走过来的路...(原创)
- 通过JAVA回头看看PHP5
- Android Activity设置全屏
- 08年研发中心Q4大会上分享的PPT【再往前试试、常回头看看、倒过来想想】
- 失意时要回头看看
- 我今年39岁了, 25岁研究生毕业,工作14年,回头看看,应该说走了不少的弯路
- 一年了,回来看看。
- Maemo Linux手机平台系列分析:12 分析其Platform后,再回头整体看看Maemo
- Android如何在Activity和Service之间传递数据
- Android(OPhone) 学习笔记 - Intent和Activity(2)
- android.app.Activity 的介绍(转)