大家好,因为这几天打算去找实习,所以需要回顾一下旧的知识,其实说是回顾,我个人觉得用把开发中的经验融合到Activity更加深一步认识,比较贴切.在这里,我技术话语可能说得比较没有那么标准,但是我是通过自己的见解来描述的.
Activity的理解
对于Activity,就是活动的意思.可是,我不建议我们把它叫活动,就直接是叫英文吧.而对于它的作用,我认为描述成容器比较合适,因为它是包含用户界面的组件,与用户进行交互的一个组件.当然,页面组件我们是通过XML文件来进行布局的,而我们一般都形容这个XML文件为布局文件.
Activity怎么使用XML布局文件呢?
setContentView();
当然,在这里我觉得大家需要区分一下,一般我们的Fragment使用的是
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = View.inflate(mActivity, R.layout.a, null);
return view;
}
Activity是一个能和用户进行交互的原因是以为他是Context的子类并且实现了window.callback和keyevent.callback两个接口..
Activity生命周期
对于Activity的生命周期,我相信每一个人在开始学习的时候就能结合到我们生活使用理解到Activity的生命周期作用.作为一个老生长谈的话题,我们今天也来说一说.
OnCreate():Activity初始化,我们一般的监听初始化,布局初始化,数据初始化都会在这个方法内进行.
onStart():由不可见到可见
onResume():准备好交互,就是再次获得焦点
onPause():失去焦点
onStop():不可见
onDestory():销毁活动,这个状态十分重要,为了保证不会发生内存溢出等问题,我们一般类似于数据库的连接以及很多的对象的摧毁,或者说反注册取消监听就会在这个方法内取消.
onRestart():停止变为调用,这个状态一般我们都是用于刷新数据,保证我们得到的数据及时更新.
当然,我们理所当然还存在着类似于onPostResume()和onPostCreate()的方法,但是这两个方法,我们基本开发很少用到.
生命周期特例:
大家有没有想过,我们屏幕横竖屏切换其实是一个对生命周期认识最好的体现.
我们一旦切换屏幕,我们就会经历了一个Activity的整个创建销毁再创建销毁的过程其中会利用Bundle存储参数,新建的时候会提交数据,这是一个十分浪费资源,并且大大降低用户体验的方式.所以我们有一个方法,
我们需要在AndroidMainfest.xml中对OrientationActivity对应的配置android:configChanges=”orientation”. 这样我们就每次只会调用onConfigurationChanged()这么一个方法.
当然,对于类似于视频播放,游戏开发,我们一般都是直接锁定的.
1.指定为竖屏:在AndroidManifest.xml中对指定的Activity设置android:screenOrientation=”portrait”,或者在onCreate方法中指定:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //竖屏
2.指定为横屏:在AndroidManifest.xml中对指定的Activity设置,android:screenOrientation=”landscape”,或者在onCreate方法中指定:
`setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //横屏
安全退出Activity
在一个全局的环境Application中实现:通过一个List<>对Activity进行管理,在利用增强循环销毁.
List<Acitivity> lists;
lists=new ArrayList<Activity>();
lists.add(this);
for<Activity activity:lists){
activity.finish(;)
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
lists.remove(this);
}
Activity状态保存
大家还记得我们刚刚上面说到的一个Bundle,其实这个Bundle是我们从来保存数据的,相对于全局的内存.
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putLong("id",12346);
}
一般在Activity的Oncreate()的方法就能获取到这个对象,以为我们上面的方法会利用Bundler对这个进行自己的内存保存,
既然说到数据传递,我这里说一下吧,我们Activity之间的数据传递,是可以通过Intent的.
一般我们对于基本类型的数据是可以这届利用
putStringExtra(key,value);//设定的方法
getStringExtra(key,value);//获取的方法
//也可已通过Bundle作为媒介;
Bundle bundle=new Bundle();
bundle.putStringExtra(key,value);
intent.putExtras(bundle);
传递对象是使用,Serializable,大概思路是将对象实现Serilizable,然后可以通过
putSerializableExtra(key,value);//设定的方法
getSerializableExtra(key,value);//获取的方法