Android开发问题笔记

一、Toolbar问题:最低版本15,必须使用support,才能使用Toolbar,Toobar是5.0引入的
二、BottomTab:这个用TabLayout解决了html

三、后端API最好采用一个成熟的框架来作,好比Restful的Django-Rest-Framework,既能够简化IT设施层、又能够复用成熟的设计:
四、最后仍是用Android Studio生成向导的TabLayout+ViewPager+PlaceFragment解决问题。
五、官网的Best Practice值得参考借鉴
六、采用OkHTTP作网络访问
七、采用Picasso作图片加载
八、采用ExpandListView作According:
http://www.cnblogs.com/eyu8874521/archive/2012/08/16/2642605.html
http://my.oschina.net/amigos/blog/62614
九、非动态调整的信息尽可能在layout里面指明
十、代码Copy+粗枝大叶坑死人:出现问题应该先本身定位。
十一、Android的UI设计思路不是作好UI套数据,而是由数据结构出UI结构,UI和数据经过Adapter在结构上匹配生成。因此本质上android不是拖拽式开发的界面设计,而是官方所宣称的MCV结构,相似于网页的MVT架构。
十二、Android设计开发第一坑:布局
1三、ListView子项的margin能够用devider来设置
1四、调效果用手机,比模拟器快,调代码用模拟器,跟踪比真机方便。
1五、要努力拉长App代码调试的时间周期,由于run一次的时间消耗不短。
1六、经过沟通提升先后端联调效率的一个方法:对领域模型的设计要有专门的沟统统气会议。
1七、AndroidSDK的本地安装文档,由于引用了远程文件的缘由,可用性不是很好。
1八、关键设计必定要有相关方审查步骤,好比数据模型、好比移动后端的API。
1九、ListView里面不该该出现布局不一致的ListItem,这样就会致使ItemView的复用出现问题
20、Button能够用text显示,tag传值。
2一、给RxJava传递的final参数可能须要copy复制才能够保证多线程读写问题,通常只有UI主线程和后台线程的情境下不须要
2二、资源状态列表,这个信息能够从官方API指南找到:
java

 

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android"; >   
  2. <item   
  3. android:color="hex_color"   
  4. android:state_pressed=["true" | "false"]   
  5. android:state_focused=["true" | "false"]   
  6. android:state_selected=["true" | "false"]   
  7. android:state_active=["true" | "false"]   
  8. android:state_checkable=["true" | "false"]   
  9. android:state_checked=["true" | "false"]   
  10. android:state_enabled=["true" | "false"]   
  11. android:state_window_focused=["true" | "false"] />   
  12. </selector>   



2三、Fragment的onCreate用来初始化数据,onCreateView用来初始化界面,前者通常只执行一次,后者随界面切换屡次执行,因此后者里面最好不要作数据加载,若是某些数据加载必须在界面初始化之后作,要加上首次执行条件判断。android

2四、TextView里可用的HTML标签,注意标签不能String资源里面直接写,直接写就被过滤掉了,可是写在代码的String变量里面能够,虽然不太符合Android开发规范,可是避免了字符转换,算是比较nice的解决方式。编程

 

  1. <href="...">  
  2. <b>  
  3. <big>  
  4. <blockquote>  
  5. <br>  
  6. <cite>  
  7. <dfn>  
  8. <div align="...">  
  9. <em>  
  10. <font size="..." color="..." face="...">  
  11. <h1>  
  12. <h2>  
  13. <h3>  
  14. <h4>  
  15. <h5>  
  16. <h6>  
  17. <i>  
  18. <img src="...">  
  19. <p>  
  20. <small>  
  21. <strike>  
  22. <strong>  
  23. <sub>  
  24. <sup>  
  25. <tt>  
  26. <u>  

2五、onCreate、onStart里面对View作操做,View均可能尚未渲染成功,因此好比getHeight获得的多是0,要确保view渲染之后代码执行,能够用view.post(runnable)后端

2六、ListView显示不全,缘由是AppbarLayout占了两行空间。把TabLayout移出AppbarLayout网络

2七、为何要用接口:没有基类的实现负担,实现基类的不一样子类对象实例的灵活可换。丛某种角度讲:接口是静态类型语言非鸭式辨型致使的累赘。数据结构

2八、Fragment的的资源新建初始化必须放在onCreate,放在onCreateView里面会致使重复调用,从而资源泄露。多线程

2九、has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added here  这个问题的交互诱因是Activity退出的时候,其界面上的dialog还在显示,解决方法,覆盖相关组件的onDestroy方法,把dialog释放掉:架构

  1. @Override  
  2. public void onDestroy(){  
  3.     super.onDestroy();  
  4.     if ( mLoadingDialog!=null && mLoadingDialog.isShowing() ){  
  5.         mLoadingDialog.dismiss();  
  6.     }  
  7. }  

 

另外多说一句话,静态对象不能引用组件资源,不然会致使被引用的组件资源没法正常地被系统框架释放掉。app

30、Android Studio 主题资源站:http://www.androidstudiothemes.com/

3一、通常来说带反向应用的组件实例对象变量要在组件onDestroy的时候把这些变量都要释放掉(=null),至于静态变量最好不要有对组件的引用,也就是说有对组件有反向应用的对象变量最好不要作成静态的。通常有队组件有反向引用的对象主要是系统组件对象。

3二、AVD虚拟机启动错误提示:

  1. emulator: WARNING: .//android/metrics/metrics_reporter_ga.c:138: curl_easy_perform() failed with code 7 (Error)  
  2. emulator: WARNING: .//android/metrics/metrics_reporter_ga.c:145: Got HTTP response code 0  


修改方法:Open the Android Studio->Preferences, go to Appearance & Behavior->System Settings->Usage Statistics, and uncheck "Send usage statistics to Google". Now the matrics_reporter will be disabled during emulator starting. 

推荐出不出错误,都作此修改,否则虚拟机启动之后,Log老报这方面的链接错误。

3三、Fragment的getView()在onCreateView这个函数执行以前是空的,因此onCreateView函数里面只能用本身inflate的view来作findViewbyID操做。

3四、RxAndroid致使的空指针问题:通常网络数据爬取完,要操做Activity或者Fragment的资源来完成数据显示更新,可是因为网络访问和用户切换界面操做的时间差,当你作数据显示更新的时候,也许Activtiy或者fragment的资源已经不复存在由此致使NullPointer Error问题,能够经过操做这些资源以前作个空指针判断来解决这个问题。

3五、Fragment的Context Activity空指针问题,因为API不一样版本之间的不一致性,在Fragment的生存生命周期内,可能存在其Context Activity其实不存在或者被销毁,在这种状况下,若是要使用这个Actiity对象,也要作空指针判断。

3六、对于Fragment的使用,《Android权威编程指南》曾经推荐尽可能使用标准库里的Fragment,而且放弃使用FragmentActivity,转而使用标准库中的Activity类,放弃使用support.v4.app.fragment,转而使用app.fragment,放弃使用getSupportFragmentManager().转而使用getFragmentManager()方法

3七、对于全部View的取其界面属性值的处理,好比getHeight,getWidth,都要用post异步化,由于作成同步,很容易是界面未正确渲染时的结果。

相关文章
相关标签/搜索