Android Bug List

1.java.lang.IllegalStateException: Cannot add header view to list

listciwe在设置头部View爆出bug,调用addHeaderView和setAdapter的顺序。
在设置headview之前调用setAdapter(null),之后重新设置adapter。

    ListAdapter adapter = listView.getAdapter();
    listView.setAdapter(null);
    listView.addHeaderView(headerView);
    listView.setAdapter(adapter);
2.EventBus事件订阅机制,post消息之后如何回调activity的事件触发方法

通过反射查找订阅者类中的onEvent函数:

 - EventBus基本实现原理
  - EventCenter持有EventBus且是单例,bindContainerAndHandler注册订阅者事件,EventHandlerManager管理所有订阅者事件;
 - EventBus线程模式
  - PostThread
  - MainThread
  - BackgroundThread
  - Async
 - EventBus存储事件
  - Map<calss<?>,CopyWriteArrayList<subscription>> ,存储event->subscription,同一事件对应的订阅者;
  - Map<Object,List<?>> ,subscription->events,同一类型订阅者的集合;
3.ImageLoder缓存机制

loadImage可以直接下载图片,displayImage显示图片

- 缓存类型
 - FIFOLimitedMemoryCache
 - LimitedAgeMemoryCache 等
- 缓存机制
 - FIFOCache类使用LinkList双链表做为存储bitmap容器(imageloader同时也增加了对bitmap对应url的键值存储,以及bitmap大小的限制),主要操作都是在MemoryCache类put remove内进行筛选操作;
 - LimitAgeCoach,使用HashMap<String ,Long>,存储bitmap时间;
- ImageLoad加载流程
 - 内存、本地、网络加载
4.ultra-ptr添加上滑加载更多
增加loadmore加载更多,在listiew中监听scroll,在onScroll中根据cell item个数判断是否到达底部(firstVisibleItem + visibleItemCount >= totalItemCount - 1),在onScrollStateChanged中确定执行loadmore操作;
5.java四种引用
 - 强引用
  - 声明变量即强应用,String s = new String();
 - 弱引用
  - 通过使用WeakReference
 - 虚引用
 - 软引用
6.handler的机制

handler流程

7.asyncTask的机制
  private class MyTask extends AsyncTask<String, Integer, String> {
        //onPreExecute方法用于在执行后台任务前做一些UI操作
        @Override
        protected void onPreExecute() {
        }

        //doInBackground方法内部执行后台任务,不可在此方法内修改UI
        @Override
        protected String doInBackground(String... params) {
        }

        //onProgressUpdate方法用于更新进度信息
        @Override
        protected void onProgressUpdate(Integer... progresses) {
        }

        //onPostExecute方法用于在执行完后台任务后更新UI,显示结果
        @Override
        protected void onPostExecute(String result) {
        }

        //onCancelled方法用于在取消执行中的任务时更改UI
        @Override
        protected void onCancelled() {
        }
    }
8.jvm分区,GC
JAVA的JVM的内存可分为3个区(常用的,一共有6个):堆(heap)、栈(stack)和方法区(method);
 - 堆区:存储的全部是对象,每个对象都包含一个与之对应的class的信息;
 - 栈区:每个线程包含一个栈区,栈中只保存原始类型数据和对象和对象引用(不是对象),对象都存放在堆区中
 - 方法区:又叫静态区,方法区包含所有的class和static变量
9.volatile与synchronized的区别
volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
10.Runnable和Callable的区别是
(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以
11.Android的存储方式
1 使用SharedPreferences存储数据
2 文件存储数据      
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据
8.android消息推送机制
9.android数据库操作
10.retrolambda, rxjava, retrofit等
11.databinding替换findViewById
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值