Android总结
来源:互联网 发布:测量图片尺寸软件 编辑:程序博客网 时间:2024/04/30 19:15
- 在res目录下新建目录的时候,右键New,然后选择 Android resource Directory,而不是选Directory,后者新建的目录不仅看不见,就算你在左上角切换成Project成功显示出你新建的目录后,当你在这目录下新建XML文件准备编辑时,Android Studio的代码提醒功能也不会起作用。所以以后新建文件夹要用Android resource Directory方法。比如新建一个anim文件夹,里面新建一个xml文件(animation resource file)作为跳转用。
- Java垃圾回收机制:GC回收对象前必须发现那些无用对象,通过跟搜索算法(搜索算法)来发现无用对象,发现后通过回收算法来回收无用对象。
Java中引用对象的类型有哪些:强引用,软引用,弱引用,虚引用。
强引用:内存不足时,jvm宁愿抛出错误也不回收此对象;
软引用:内存不足时,jvm回收此对象;
弱引用:jvm扫描到此对象,就回收,不管内存够不够;
虚引用:虚引用必须和引用队列联合使用,不是很清楚这个引用。单例模式的最好写法:
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; } }
- 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脚本啊,最好也能了解一点
- 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);
}
- Android 总结
- ANDROID 总结
- Android总结
- Android总结
- android总结
- Android 总结
- Android总结
- Android总结
- Android 总结
- Android总结
- Android总结
- Android总结
- Android总结
- Android总结
- 【Android 总结】Android 知识点
- Android总结 - 网络请求总结
- Android学习计划 & Android学习总结
- Android Android.mk && Application总结
- oracle实例管理及数据库的启动/关闭
- 开源软件架构 - Asterisk
- Leetcode 94. Binary Tree Inorder Traversal
- redis在spring框架中的使用
- JavaScript强化教程——Native.js示例汇总
- Android总结
- 最新县及县以上行政区划代码 的数据进行分割 对应的成一级二级 然后对写进数据库就容易了
- 开源软件架构-GDB
- 专题四1011
- mysql的主、从、dump数据库关系
- 抽象类与接口及简单的工厂模式
- svn常见问题,报错,命令
- C++类的构造函数与析构函数
- Spring创建对象的方式3种方式