Android 开发常见问题汇总

Dex分包,解决64K限制的问题:

Android 开发常见问题汇总_第1张图片

参考链接:https://developer.android.com/studio/build/multidex.html#mdex-gradle

问题1:Android项目中的命名规则

举例如下:
Activity:             TemplateActivity
Activity布局文件:      activity_模块名_template
Activity布局文件Id定义:template_listView(组件类型)[_history]
Adapter:              TemplateAdapter
Adapter布局文件:       模块名_template_item
Adapter布局文件中Id定义:template_item_tv(组件类型)_title
String|dimen|style:  模块名_template_title(文字内容表达意思)   
[]:可选; ():解释

问题2:

使用场景:
    获取设备信息,键值对形式,然后进行Base64传递到Server。
    例如:osv=6.0&screenpix=1920x1080&IP=::1%1
遇到问题:   
    获取到的IP含有:等非字符和数字的内容,传递到Server进行Base64解码就会出现错误。
解决办法:
    对获取到的设备信息进行encode,即对value URLEncoder.encode(value.toLowerCase(), "utf-8");
    key不进行处理。
补充:
    有时候获取到的Base64数据不完整,也会报错。

问题3:

#报错:
Error:(23, 12) This support library should not use a lower version (19) than the targetSdkVersion (20)
#解决办法:
Change
compile 'com.android.support:appcompat-v7:19.+'
to
compile 'com.android.support:appcompat-v7:20+'

问题4: 登陆页面 输入时账号时 弹出键盘覆盖 密码输入框

期望:输入能够把输入页面顶上去。
解决方法:Activity设置成非全屏且:android:windowSoftInputMode = "adjustResize" 

问题5 :点击EditText输入两次才弹出DatePickerDialog。

期望:点击一次弹出DatePickerDialog
解决方法:EditText改为TextView即可。

问题6:The content of the adapter has changed but ListView did not receive a notification

期望:不出现该bug
 思路:   在Android开发过程中,使用了大量的ListView,发现这个错误偶尔会出现。特别是做压力测试的时候,不停的点击刷新,更容易出现这个错误。代码中已经使用了Adapter的notifyDataSetChanged()方法通知UI更新了,但是还是会出现这个错误。究其根本原因,还是线程之间同步的问题。比如,线程1更新了Adapter中的内容,却还没有来得及通知内容已经更新,就又有线程2更新了Adapter中的内容,这个时候如果线程1再通知内容更新,就会出现上述异常了。

在此提出一些解决办法:
对线程进行管理,如果当前Actitivty暂停了,及时停止这些线程。
数据更新后,要及时使用notifyDataSetChanged()方法通知UI,避免出现数据不一致的情况。
数据的更新,最好放在主线程中进行。这样可以使用同步数据更新与通知内容更新部分的代码。

最后补充一条我最终解决问题的方法:
在用到多线程的时候,可以对数据做缓存处理, 比如与ListView绑定的数据存储在ArrayList (dataList), 在线程中先将数据加入到临时ArrayList(tmpList) , 最后在调用notifyDataSetChanged()方法通知UI更新之前, 把临时ArrayList(tmpList)中的数据更新到ArrayList(dataList)中, 然后清空临时ArrayList(tmpList)数据。

参考:http://blog.csdn.net/garybook/article/details/7498342

问题7:内存泄露

思路:使用Memory Analyzer Tool(MAT)内存分析工具进行分析。

问题8 Jpush推送相关问题:

1  关于不活跃用户:长期未打开APP,则会被Jpush标志为不活跃用户,之后不再接收推送,(除非用户主动打开APP,此句话待验证)
2  新建的APP,所有安装用户都是活跃用户。
3  小米的手机,普通App默认是非自启动,自启动广播也被屏蔽。

问题9: EditText焦点键盘弹出问题:

 取消:
            在EditText的父级控件中找一个,设置成 
            android:focusable="true" 
            android:focusableInTouchMode="true" 
获取:

问题10: 在Eclipse添加Android兼容包( v4、v7 appcompat )

http://www.cnblogs.com/kissazi2/p/3644848.html

问题11: ScrollView 和Listview冲突的解决方案:

方案一
方案二
方案三
方案四。。推荐

问题12: 不同版本ADT混淆方式:

参考:http://www.tuicool.com/articles/amIn6vj
Android 开发常见问题汇总_第2张图片

问题13 自动开关机实现:

http://www.cnblogs.com/melaniedeng/archive/2012/02/16/2355066.html

问题14: FragmentStatePagerAdapter+viewpager第二次进入该fragment不显示数据

解决方法:
     在含有ViewPager的Fragment的onCreateView方法中添加代码:
                if (view != null) {
                ViewGroup parent = (ViewGroup) view.getParent();
                if (parent != null) {
                parent.removeView(view);
                }
                return view;
                }

问题15:

报错:
    AAPT err(1663341075): libpng error: Not a PNG file
原因:
    使用的图片中存在不是png的图片
解决办法:
    仅仅改后缀名是不可以的,必须使用工具转换,此处 推荐使用ImageMagick

16 Android半透明设置:

 android:background="#b0000000"
 支持格式如下:
        #RGB
        #ARGB
        #RRGGBB
        #AARRGGBB

 #b0|000000 :b0代表透明度Alpha

参考


问题16:

Error:Execution failed for task':app:processDebugResources'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Users/lincoln/Android/sdk/build-tools/23.0.3/aapt'' finished with non-zero exit value 1

分析:
:app:processDebugResources’;说明是资源出问题了;
常见原因:
如下代码:如果没有定义格式,即没有format=”dimension”就会报错

 <declare-styleable name="Btn_normal">
        <attr name="img_width"
            format="dimension"/>
    declare-styleable>

Android M新特性


EditTextView:

1. 设置光标到指定位置:setSelection()
2. 隐藏光标:setCursorVisible(false);
3. 选中内容:setSelectAllOnFocus(true);
4. 失去焦点:
        et.requestFocus(); //请求获取焦点
        et.clearFocus(); //清除焦点

Android 开发常见问题汇总_第3张图片

你可能感兴趣的:(Android其他总结)