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?在CODE上查看代码片派生到我的代码片
  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?在CODE上查看代码片派生到我的代码片
  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>  

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?在CODE上查看代码片派生到我的代码片
  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?在CODE上查看代码片派生到我的代码片
  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异步化,因为做成同步,很容易是界面未正确渲染时的结果。



本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/5874621.html,如需转载请自行联系原作者

相关文章
|
10天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
3天前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
|
3天前
|
物联网 Java 开发工具
安卓应用开发:打造未来移动生活
【5月更文挑战第10天】 随着科技的飞速发展,智能手机已成为我们日常生活中不可或缺的一部分。作为智能手机市场的两大巨头,安卓和iOS分别占据了一定的市场份额。在这篇文章中,我们将重点关注安卓应用开发,探讨如何利用先进的技术和创新思维,为用户打造更加便捷、智能的移动生活。文章将涵盖安卓应用开发的基本概念、关键技术、以及未来发展趋势等方面的内容。
|
4天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
11 0
|
6天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
16 1
|
6天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
13 0
|
7天前
|
Android开发
Android 盒子开发过程中遇到的问题及解决方法
Android 盒子开发过程中遇到的问题及解决方法
8 2
|
7天前
|
机器学习/深度学习 算法 Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第6天】 在现代移动应用的海洋中,用户经常面临信息过载的挑战。一个精心设计的通知管理系统对于提升用户体验至关重要。本文将探讨在安卓平台上如何实现一个高效的通知管理系统,包括最佳实践、系统架构设计以及性能优化技巧。通过分析安卓通知渠道和优先级设置,我们的目标是帮助开发者构建出既能吸引用户注意,又不会引发干扰的智能通知系统。
18 2
|
8天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
13天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第30天】在移动开发领域,尤其是安卓平台上,内存管理是影响应用性能和用户体验的关键因素。由于安卓设备的硬件资源有限,不合理的内存使用会导致应用响应缓慢、消耗过多电量甚至崩溃。本文将探讨针对安卓平台的内存优化技巧,旨在帮助开发者提高应用的性能和稳定性,从而提升用户满意度。我们将详细讨论内存泄漏的预防、合理的内存分配策略以及高效的内存回收方法。