Android开发问题笔记

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

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

[html] view plain copy print?

  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>

23、Fragment的onCreate用来初始化数据,onCreateView用来初始化界面,前者一般只执行一次,后者随界面切换多次执行,所以后者里面最好不要做数据加载,如果某些数据加载必须在界面初始化以后做,要加上首次执行条件判断。

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

[html] view plain copy print?

  1. <a 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>

25、onCreate、onStart里面对View做操作,View都可能还没有渲染成功,所以比如getHeight得到的可能是0,要确保view渲染以后代码执行,可以用view.post(runnable)

26、ListView显示不全,原因是AppbarLayout占了两行空间。把TabLayout移出AppbarLayout

27、为什么要用接口:没有基类的实现负担,实现基类的不同子类对象实例的灵活可换。丛某种角度讲:接口是静态类型语言非鸭式辨型导致的累赘。

28、Fragment的的资源新建初始化必须放在onCreate,放在onCreateView里面会导致重复调用,从而资源泄露。

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

[java] view plain copy print?

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

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

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

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

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

[plain] view plain copy print?

  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老报这方面的连接错误。

33、Fragment的getView()在onCreateView这个函数执行之前是空的,所以onCreateView函数里面只能用自己inflate的view来做findViewbyID操作。

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

35、Fragment的Context Activity空指针问题,由于API不同版本之间的不一致性,在Fragment的生存生命周期内,可能存在其Context Activity其实不存在或者被销毁,在这种情况下,如果要使用这个Actiity对象,也要做空指针判断。

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

37、对于所有View的取其界面属性值的处理,比如getHeight,getWidth,都要用post异步化,因为做成同步,很容易是界面未正确渲染时的结果。

时间: 2024-11-05 11:29:25

Android开发问题笔记的相关文章

【Android开发学习笔记】【第三课】Activity和Intent

首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

android 开发学习笔记 (一)

每个app 都有一个自己的 linux 进程: 每个进程都在自己的虚拟机里执行 两个app 可以跑在一个进程,一个vm里 android app 四大组件:activity,content provider,      services, broardcast receivers Content Resolver 激活 Content Provider You can start an      activity (or give it something new to do) by passi

android开发学习笔记000

使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个一直梦想走技术流的再疯狂一次.2014.08.06. 直奔主题——>android开发学习笔记001 android开发学习笔记000

android开发学习笔记001a

Android 应用与开发环境 1.使用SDK版本:Android 2.3 . 2.发展和历史 创始人:Andy Rubin,Android公司被Google收购.07年11月5日1.0发布. 3.平台架构及特性 Linux内核(操作系统)->函数库,Android运行时(中间件)->应用程序框架->应用程序 我要学习的就是如何在android 操作系统里开发应用程序. 我们只和应用程序框架(Android API)打交道.也就是我们的SDK. 函数库是C/C++的库. Android

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

【Android开发学习笔记】【第五课】Activity的生命周期-上

今天学习Activity当中的七个生命周期函数: 首先得说一个事情,就是在代码当中如果加入了 System.out.println(" ------");之后,如何查看这里面的输出内容 打开之后只输入“Filter Name”和“by Log Tag” 即可 添加成功后可以看到 本次学习主要总结如下: 1.onCreate() Acitivity首次创建时被调用.用于设置Acitivity的布局文件,绑定按钮监听器等一些普通静态操作. 2.onStart() Acitivity对用户可

【Android开发学习笔记】【第四课】基础控件的学习

通过一个简单的例子来学习下面几种控件: 1.TextView:简单的文本显示控件 2.EditText:可以编辑的文本框 3.Button:按钮 4.Menu:这里指的是系统的Menu 5.Toast:消息提示控件,类似于MFc的tip(不知道理解的对不对) 顺便用到上一次学习的多个Activity之间传递数据的技术,来做一个小的计算乘法的case 步骤: (1)主Activity 和显示结果的 Activity 都采用线性布局,下面是布局文件的源代码: <LinearLayout xmlns:

转 Android开发学习笔记:浅谈WebView

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例化WebView组件:WebView webView = new WebView(this); 2

Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建

一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.    笔者没有怎么使用过Eclipse做Android学习,但是基于Android Studio类似于VS的项目架构,还是偏爱Android Studio这个IDE,没

Android开发自学笔记(Android Studio1.3.1)&mdash;3.Android应用结构解析

一.R文件是什么?      如上图所示,我们可以通过findViewById方法通过传入R.id.show找到我们的TextView元素,findViewById方法也很好理解,从View中通过Id找到,那么R是什么呢?      资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件.在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使用到的所有资源文件的标示,在Android Studio编译环境下