安卓开发过程中遇到问题总结二
2016-07-28 19:16
507 查看
http://blog.csdn.net/u013278099/article/details/50844146
2016-03-10 10:16 666人阅读 评论(1) 收藏 举报
分类:
android(71)
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
原因:在自定义view里面调用了如下方法来保存画布的bitmap图像;
mCanvas.restore()
解决方法:改成:
mCanvas.save();
mCanvas.restore();
Okay!解决!
Android四大组件之间Intent传递数据,数据不能过大,基本要小于1M,不然会导致程序黑屏,ANR.
当我们的Activity是继承自Activity或者是FragmentActivity时不会有问题;但当我们继承的是AppCompatActivity时就会报错,
解决方法是 getSupportActionBar().hide()或者是这是主题为Theme.AppCompat.Light.NoActionBar;
在封装library的时候,尽量不要引入第三方包,v4,v7等自带的包也是一样尽量不要引入,避免以后工程依赖的时候,包或者包内文件产生冲突。
对于冲突的包,改成一样的就可以解决了。
CPU_ABI : armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64.
复制你的.so文件到/libs/(armeabi|armeabi-v7a|x86|…)
Android Studio复制到jniLibs文件夹下,eclipse 复制到libs文件夹下。
注意当你使用多个第三方库的时候时,而且这些库有使用.so文件,创建文件夹时应保证【最少原则】。
比如:一个库中.so文件支持armeabi,armeabi-v7a,x86,另外一个库却只支持armeabi-v7a这样也会造成该问题的产生,因为支持x86的机器会在另一个库中找不到.so文件而保错。
1.viewpager+fragment模式setUserVisibleHint()方法是执行的,其中第一个fragment的该方法执行两次,第一次在onAttch()方法执行之前,第二次在onCreate()方法执行之后,在onCreateView()方法执行之前。当我们把fragment缓存起来时,该方法还是会执行的。
2.当我们自己切换fragment时,transition.add(R.id.main_content, mainFragment);(获取用replace),fragment 中的setUserVisibleHint()是不执行的。
同时为了兼容5.0以上版本,需要在Java代码中编写:
android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an application
导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
解决方法:将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity是你的Activity的名称)来填充就可以正确的创建一个Dialog了。
现象:
谷歌解决方案:
解决方法:
根布局添加属性:
xmlns:tools=”http://schemas.android.com/tools”
textview添加属性:
tools:text=”默认文字”
这样就可以在android studio编辑时显示默认文字,以便直观看到布局,又避免在真机运行时显示默认文字影响用户友好设计。
我把api升级到23后,编译发现在NetCenter.java中有几个错误,如下图所示:
解决方法
1 把api降级,这对于我是不能忍受的
2 既然废除了,总会留下痕迹,果然,在sdk里留给了我们一个jar包
只要把该jar包导入就ok了,最好同步或者clean下,哈哈!
3 发现了新东西,gradle脚本里添加:
github上下载导入的项目clean就出错了,显示的错误信息是在windows 下图片路径的字节不能超过240
解决办法:
把工程的名字写短点就好了。
安卓开发过程中遇到问题总结二
2016-03-10 10:16 666人阅读 评论(1) 收藏 举报分类:
android(71)
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
1.android 自定义view报如下错误:java.lang.IllegalStateException: Underflow in restore
原因:在自定义view里面调用了如下方法来保存画布的bitmap图像; mCanvas.restore()
解决方法:改成:
mCanvas.save();
mCanvas.restore();
Okay!解决!
2.使用Intent传递数据量大时(尤其是bitmap对象),app没反应?
Android四大组件之间Intent传递数据,数据不能过大,基本要小于1M,不然会导致程序黑屏,ANR.
3.this.requestWindowFeature(Window.FEATURE_NO_TITLE);代码中去掉标题栏使用时报错?
当我们的Activity是继承自Activity或者是FragmentActivity时不会有问题;但当我们继承的是AppCompatActivity时就会报错,解决方法是 getSupportActionBar().hide()或者是这是主题为Theme.AppCompat.Light.NoActionBar;
4.在使用第三方库经常报有一些v4,v7包冲突问题?
在封装library的时候,尽量不要引入第三方包,v4,v7等自带的包也是一样尽量不要引入,避免以后工程依赖的时候,包或者包内文件产生冲突。 对于冲突的包,改成一样的就可以解决了。
5.Can’t load native library.CPU arch invalid for this build?
CPU_ABI : armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64. 复制你的.so文件到/libs/(armeabi|armeabi-v7a|x86|…)
Android Studio复制到jniLibs文件夹下,eclipse 复制到libs文件夹下。
注意当你使用多个第三方库的时候时,而且这些库有使用.so文件,创建文件夹时应保证【最少原则】。
比如:一个库中.so文件支持armeabi,armeabi-v7a,x86,另外一个库却只支持armeabi-v7a这样也会造成该问题的产生,因为支持x86的机器会在另一个库中找不到.so文件而保错。
6.Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题
<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">/*在应用程序设置<action android:<span class="hljs-property" style="box-sizing: border-box;">name</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"android.intent.action.MAIN"</span> />应用程序入口Activity的onCreate方法中加入上面的判断,完美解决应用程序多次重启问题。 */ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>){ finish(); <span class="hljs-command" style="box-sizing: border-box;"> return</span>; }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
7.Fragment中的setUserVisibleHint不执行?
1.viewpager+fragment模式setUserVisibleHint()方法是执行的,其中第一个fragment的该方法执行两次,第一次在onAttch()方法执行之前,第二次在onCreate()方法执行之后,在onCreateView()方法执行之前。当我们把fragment缓存起来时,该方法还是会执行的。 2.当我们自己切换fragment时,transition.add(R.id.main_content, mainFragment);(获取用replace),fragment 中的setUserVisibleHint()是不执行的。
8.去掉actionBar的阴影
android5.0以下版本修改style.xml添加以下代码:<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><style <span class="hljs-property" style="box-sizing: border-box;">name</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"AppTheme"</span> parent=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Theme.AppCompat.Light.DarkActionBar"</span>> <<span class="hljs-property" style="box-sizing: border-box;">item</span> <span class="hljs-property" style="box-sizing: border-box;">name</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"android:actionBarSize"</span>><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40</span>dp</<span class="hljs-property" style="box-sizing: border-box;">item</span>> <!<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--下段代码就是去除阴影的--></span> <<span class="hljs-property" style="box-sizing: border-box;">item</span> <span class="hljs-property" style="box-sizing: border-box;">name</span>=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"android:windowContentOverlay"</span>>@null</<span class="hljs-property" style="box-sizing: border-box;">item</span>> </style></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
同时为了兼容5.0以上版本,需要在Java代码中编写:
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> //以下代码用于去除阴影 if(Build<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.VERSION</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.SDK</span>_INT>=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span>){ getSupportActionBar()<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.setElevation</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>
9.token null is not for an application
android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an application导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
解决方法:将new AlertDialog.Builder(Context context)中的参数用Activity.this(Activity是你的Activity的名称)来填充就可以正确的创建一个Dialog了。
10.getDrawable()方法好像就过时了
现象: 谷歌解决方案:
11.默认文字只在android studio 编辑时显示,而在真机运行时不显示,避免加载数据时的不友好展示呢?
解决方法:根布局添加属性:
xmlns:tools=”http://schemas.android.com/tools”
textview添加属性:
tools:text=”默认文字”
这样就可以在android studio编辑时显示默认文字,以便直观看到布局,又避免在真机运行时显示默认文字影响用户友好设计。
12.Android api23中删除HttpClient的相关类的解决方法
我把api升级到23后,编译发现在NetCenter.java中有几个错误,如下图所示:解决方法
1 把api降级,这对于我是不能忍受的
2 既然废除了,总会留下痕迹,果然,在sdk里留给了我们一个jar包
只要把该jar包导入就ok了,最好同步或者clean下,哈哈!
3 发现了新东西,gradle脚本里添加:
<code class="hljs bash has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">android { useLibrary <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"org.apache.http.legacy"</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
14.android studio 在项目clean时候出现v-7下的.9图片出错
github上下载导入的项目clean就出错了,显示的错误信息是在windows 下图片路径的字节不能超过240 解决办法:
把工程的名字写短点就好了。
相关文章推荐
- 对Socket CAN的理解(5)——【Socket CAN控制器的初始化过程】
- 【腾讯Bugly干货分享】一步一步实现Android的MVP框架
- Android 面试题大全
- 根据文字设置label的size
- Swift支持Amazon S3的机制及优化
- Python模块习题
- java中的高级流
- 【腾讯Bugly干货分享】iOS黑客技术大揭秘
- scan design flow(二)
- poj 3175
- 对Socket CAN的理解(4)——【Socket CAN接收数据流程】
- POJ 3159 差分约束
- HDU1321 ZOJ1295 Reverse Text【水题】
- POJ 3159 差分约束
- 对Socket CAN的理解(3)——【Socket CAN发送数据流程】
- C# ip hash算法实现ip分流
- 文件
- Android/iOS轻量级存储(账号密码等)
- 虚幻4 制作UI粒子系统插件
- 等比数列二分求模