Android 基础 -------Activity

Activity 是安卓的四大组件之一,是直接与用户进行交流的页面。

Activity的使用:
1.声明
Activity 在使用的时候需要在清单文件(AndroidManifest.xml)中进行注册
2.继承一个Activity的 基类
如:ListActivity、ExpandableListActivity、PreFerenceActivity 、launcherActivity 等。
3.覆写其中的方法。

由于在使用activity的时候需要覆写Activity中的方法就不得不提到Activity中的生命周期。Activity的生命周期 使用的是回调模式 ,系统会在固定的或者环境下调用这些方法 (方法如下)。
onStart() —> onCreate() —> onResume() —> onPause() —> onStop() —-> onDestory()
其中onRestart() 方法比较特别,该方法的调用类似于电脑某个窗口最小化后再打开

Activity使用时的注意事项:
由于安卓系统的运行机制(安卓系统会在内存不足的时候杀死某些进程,从而获取充足的内存),某些activcity会在app运行的时候被回收掉,当你再次回到该页面时会重新启动,这样就会使得你在离开该页面时所做的操作没有被保留下来,会给用户带来比较差的体验。

因此在使用activity的时候应该注意一些临时数据的保存(如横竖屏切换也会遇到这个问题)。
在andorid中,有一个onSaveInstanceState ()方法专门用于处理这类情况,该方法的参数中含有一个bundle,如果该acticity被系统回收(用户手动关闭该页面不会调用该方法)会调用这个方法保存一些临时数据,再次创建activity的时候该bundle会传入oncreat
e()方法中,可以在这里将保存的临时数据取出。同时,在谷歌的官方文档中也生命了,由于该方法不是activity的生命周期函数之一,系统并不一定会调用到该方法,因此某些固化数据最好在onPause方法中进行保存,如数据库的插入等。

补充:在安卓中保存数据的方法有:文件(流写入),sharepreference(类似文件,具体操作已经封装好,直接使用即可),数据库(安卓内置了SQLite数据库 支持MySQL语句和API),网络(存到服务器上),内容提供者(与数据库类似),内存(不能永久保存,可以临时保存一些东西)。

Acticity之间数据传输与跳转:
在上面提到了bundle就不得不提起Intent,Intent的用途有很多。Intent可以用于开启新的Acticity(不仅仅是Acticity,BroadCastReceive,Service),而且还可以用来携带数据,对不同页面进行信息传递(现在喜欢使用EventBus进行传递信息)。

Intent的使用:
Intent分为显式和隐式两种,其实显示意图比较快,但是使用起来比较单一(一般用于同一个app中跳转页面使用),隐示意图虽然比较慢(需要遍历和匹配acition和filter),用于跳转其他app或者系统应用时使用(可以根据本机的状况,手动选择不同的应用进行打开)

Intent不仅仅可以传递基础类型的信息,还可以传递对象。不过对象必须要实现序列化。
Andorid中不仅仅有java的Serializable序列化方法 还有andorid独有的Parcelable序列化方法。
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。但是在使用的时候相对于Serializable要麻烦很多。Serializable只需要实现Serializable接口然后什么都不需要做。而Parcelable则麻烦的多。不过好消息是,如果你是使用Andorid studio作为IDE 那么其实也是仅仅实现一个借口,然后IDE会帮你自动补全。

Activity其他相关

Theme:主题的来源有三个:
1) 来自Android系统自带的
2) 来自兼容包的(比如v7兼容包)
3) 你自己写一个主题(自定义主题,在这里不介绍自定义主题)

注意事项:
使用android系统中自带的主题要加上“android:”,如:android:Theme.Black
使用v7兼容包中的主题不需要前缀,直接:Theme.AppCompat
很多主题在使用时会报错,原因有很多,比如窗体必须继承AppCompactActivity,或者要继承ActionBarActiivty,或者要继承FragmentActivity,或者需要手动指定宽高,或者需要提升最低API版本,或者需要更高版本的SDK,或者兼容包版本不对等原因。

启动模式(4种) :
andorid中有四种启动模式,分别如下:
standard 慢慢堆叠 默认启动模式
singleTop 在最上面不需要堆叠两个一样的
singleTask 干掉上面的 让它成为最上面的
singleInstance 单独享受一个独立栈

合作开发的Activity使用小技巧:

在BaseActivity中写 可以清楚的知道在那个Activity中(集成baseActivity的类)
Log.i(“BaseActivity”, getClass().getSimpleName());

合作开发两人写不同页面 不清楚传值:
正常启动

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra(“param1”, “data1”);
intent.putExtra(“param2”, “data2”);
startActivity(intent);

较为方便的启动acitivit 方便传递参数 方法必须是static 的静态方法
public static void actionStart(Context context, String data1, String data2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra(“param1”, data1);
intent.putExtra(“param2”, data2);
context.startActivity(intent);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值