<size
android:width=“integer”
android:height=“integer” />
4.获取RadioGroup中被选中的条目
1.调用RadioGroup的getCheckedRadioButtonId方法
5.使用命令行查看数据库
1.sqlite3 mythmayor.db命令进入数据库模式
6.ListView空数据的处理
1.在布局文件中添加上空数据时的布局
2.在适配器的getCount方法中,根据数据是否为0,对空数据时的布局进行显示和隐藏
7.ListView的优化
1.复用历史缓存的view对象convertView,减少view对象创建的次数
2.使用ViewHolder保存子View引用,减少findViewById的次数
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view ;
ViewHolder holder;
//1.复用历史缓存的view对象convertView,减少view对象创建的次数
if(convertView==null){
view = View.inflate(CallSmsSafeActivity.this, R.layout.item_call_smssafe, null);
//2.ViewHolder保存子View引用
holder = new ViewHolder();
holder.tv_phone = (TextView) view.findViewById(R.id.tv_item_blacknumber);
holder.tv_mode = (TextView) view.findViewById(R.id.tv_item_mode);
holder.iv_delete = (ImageView) view.findViewById(R.id.iv_item_delete);
//ViewHolder保存到View对象里
view.setTag(holder);
}else{
view = convertView;
holder = (ViewHolder) view.getTag();
}
}
/**
- view 的容器,用来存储子孩子的引用.
*/
class ViewHolder{
TextView tv_phone;
TextView tv_mode;
ImageView iv_delete;
}
8.加载大量数据的优化方法
1.初始化
1.1 在布局文件中加入进度条,加载数据之前显示进度条
1.2 加载数据放在子线程中,加载数据后隐藏进度条
1.3 调用runOnUiThread方法修改界面
2.非初始化
2.1 不再重新查找所有数据,仅添加单条数据到集合中
2.2 将需要的其他数据也添加到Intent中
2.2 添加单条数据到集合里,刷新界面
9.优化的本质和原则
1.本质:拆东墙补西墙,根据需求进行取舍。
2.原则:
2.1 时间换时间——禁用开机启动项
2.2 时间换空间——byte[] buf=new byte[1024].
2.3 空间换时间——Everythings,Android图库,创建本地文件保存数据索引
2.4 空间换空间——虚拟内存,ramdisk
3.补充Universal Image Loader的核心原理
3.1 运用空间换时间,将从服务器获取的图片缓存到内存里。
3.2 内存的空间是有限的,运用空间换空间,在SD卡里也将图片缓存一份
3.3 取图片的时候先从内存中取,因为内存取最快
3.4 内存中没有的时候从SD卡里取
10.监听来电状态
private TelephonyManager tm;
private MyPhoneStateListener listener;
//1.初始化时注册一个电话状态的监听器
@Override
public void onCreate() {
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
listener = new MyPhoneStateListener();
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
}
//2.创建电话状态监听器
private class MyPhoneStateListener extends PhoneStateListener{
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE://空闲状态
break;
case TelephonyManager.CALL_STATE_RINGING://响铃状态
String mode = dao.find(incomingNumber);
//1.电话拦截 2 短信 3全部拦截.
if(“1”.equals(mode)||“3”.equals(mode)){
Log.i(Tag,“挂断电话”);
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接通电话状态.
break;
}
}
}
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
//3.注销时释放资源
@Override