Android总结

来源:互联网 发布:测量图片尺寸软件 编辑:程序博客网 时间:2024/04/30 19:15
  1. 在res目录下新建目录的时候,右键New,然后选择 Android resource Directory,而不是选Directory,后者新建的目录不仅看不见,就算你在左上角切换成Project成功显示出你新建的目录后,当你在这目录下新建XML文件准备编辑时,Android Studio的代码提醒功能也不会起作用。所以以后新建文件夹要用Android resource Directory方法。比如新建一个anim文件夹,里面新建一个xml文件(animation resource file)作为跳转用。
  2. Java垃圾回收机制:GC回收对象前必须发现那些无用对象,通过跟搜索算法(搜索算法)来发现无用对象,发现后通过回收算法来回收无用对象。
  3. Java中引用对象的类型有哪些:强引用,软引用,弱引用,虚引用。
    强引用:内存不足时,jvm宁愿抛出错误也不回收此对象;
    软引用:内存不足时,jvm回收此对象;
    弱引用:jvm扫描到此对象,就回收,不管内存够不够;
    虚引用:虚引用必须和引用队列联合使用,不是很清楚这个引用。

  4. 单例模式的最好写法:

   public class Singleton{       private Singeton{}       private static class SingletonLoader{           //将INSTANCE设置为常量,常量值为Singleton实例,保证单例           private final static Singleton INSTANCE=new Singleton();       }       public static Singleton getInstance(){            return SingletonLoader.INSTANCE;       }   } 
  1. eventbus:
    onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
    onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以onEvnetMainThread方法中是不能执行耗时操作的。
    onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那onEventBackground函数直接在该子线程中执行。
    onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.
    步骤:注册与反注册,创建一个需要传递的类,发送(EventBus.getDefault().post(类实例)时发送的是这个类的实例,接收时参数就是这个类实例。
    所以!!!!!!当发过来一个消息的时候,EventBus怎么知道要调哪个函数呢,就看哪个函数传进去的参数是这个类的实例,哪个是就调哪个。那如果有两个是呢,那两个都会被调用!
    另:3.0版本已经支持自定义需要接收的方法了,四个方法名可以自定义,但参数还是需要与传递过来的类实例保持一致,同时在方法头上添加@Subscribe。也就是说,你需要在哪个线程接收,就写在哪个线程,不再需要上面的四个回调方法了

6.主流第三方框架: ormlite,okhttp,Picasso,glide,retrofit,leakcanary,greendao

7.framework层的东西,经常问到。全是一些原理性的东西,如果handler的原理、view绘制、事件分发
比如mvc、mvp架构。
常用的三方库rxjava、retrofit、okhttp等等

内存泄露和优化、程序速度优化(包括启动速度,卡顿)、热补丁、framework层能了解一些最好、openGL
还有一些多渠道打包啊、gradle脚本啊,最好也能了解一点

  1. Listview 条目里包含checkbox复选框,当滑动listview时,会自动走checkbox的setOnCheckedChangeListener()监听,导致滑出屏幕后已选中checkbox状态改变。解决办法是:
    在初始化CheckBox状态和设置状态变化监听事件之前,先把状态变化监听事件设置为null holder.checkBox.setOnCheckedChangeListener(null); //然后设置CheckBox状态 if(isChecked) { holder.checkbox.setChecked(true); } else { holder.checkbox.setChecked(false); } //然后设置状态变化监听事件 holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ //… }else{ //…. } } });

9.include标签的使用:看这个文章 说得很好。http://www.cnblogs.com/top5/archive/2012/05/07/2486909.html

10.ScrowView里面嵌套ListView,解决冲突的方法,有三种。
1.重写ListView的OnMeasure方法(最简单常用),使ListView自适应ScrowView。
@Override
/**
* 重写该方法,达到使ListView适应ScrollView的效果
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}

0 0
原创粉丝点击