Android - weight,patch图片,shape图形,android开发入门书籍推荐

本文介绍了Android开发中的性能优化技巧,包括ListView的优化、数据加载优化、内存和空间的权衡策略,以及如何监听来电状态进行电话拦截。同时,文章还提及了使用SQLite数据库、显示进度条以及使用ViewHolder减少 findViewById 的调用次数等关键实践。
摘要由CSDN通过智能技术生成

<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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值