参考链接:https://developer.android.com/studio/build/multidex.html#mdex-gradle
举例如下:
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(文字内容表达意思)
[]:可选; ():解释
使用场景:
获取设备信息,键值对形式,然后进行Base64传递到Server。
例如:osv=6.0&screenpix=1920x1080&IP=::1%1
遇到问题:
获取到的IP含有:等非字符和数字的内容,传递到Server进行Base64解码就会出现错误。
解决办法:
对获取到的设备信息进行encode,即对value URLEncoder.encode(value.toLowerCase(), "utf-8");
key不进行处理。
补充:
有时候获取到的Base64数据不完整,也会报错。
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+'
期望:输入能够把输入页面顶上去。
解决方法:Activity设置成非全屏且:android:windowSoftInputMode = "adjustResize"
期望:点击一次弹出DatePickerDialog
解决方法:EditText改为TextView即可。
期望:不出现该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
思路:使用Memory Analyzer Tool(MAT)内存分析工具进行分析。
1 关于不活跃用户:长期未打开APP,则会被Jpush标志为不活跃用户,之后不再接收推送,(除非用户主动打开APP,此句话待验证)
2 新建的APP,所有安装用户都是活跃用户。
3 小米的手机,普通App默认是非自启动,自启动广播也被屏蔽。
取消:
在EditText的父级控件中找一个,设置成
android:focusable="true"
android:focusableInTouchMode="true"
获取:
http://www.cnblogs.com/kissazi2/p/3644848.html
方案一
方案二
方案三
方案四。。推荐
参考:http://www.tuicool.com/articles/amIn6vj
http://www.cnblogs.com/melaniedeng/archive/2012/02/16/2355066.html
解决方法:
在含有ViewPager的Fragment的onCreateView方法中添加代码:
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
return view;
}
报错:
AAPT err(1663341075): libpng error: Not a PNG file
原因:
使用的图片中存在不是png的图片
解决办法:
仅仅改后缀名是不可以的,必须使用工具转换,此处 推荐使用ImageMagick
android:background="#b0000000"
支持格式如下:
#RGB
#ARGB
#RRGGBB
#AARRGGBB
#b0|000000 :b0代表透明度Alpha
参考
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新特性
1. 设置光标到指定位置:setSelection()
2. 隐藏光标:setCursorVisible(false);
3. 选中内容:setSelectAllOnFocus(true);
4. 失去焦点:
et.requestFocus(); //请求获取焦点
et.clearFocus(); //清除焦点