开发APP中遇到的坑
来源:互联网 发布:可视化编程软件哪个好 编辑:程序博客网 时间:2024/05/09 14:52
这篇博文主要是记录下自己日常开发中遇到的一些坑,以及相应的解决解决方案,权当自己的笔记,如有兄弟遇到类似的问题,欢迎交流。
Activity之间跳转的生命周期问题 :
背景 :有两个Activity A和B,A跳转到B,全局静态属性BitmapUtil.drr记录了文件的路径数据;A跳转到B时,A在onDestroy里清空drr数据,请问B在onCreate方法和onResume方法里读取到的drr数据是不是为空?测试结果:A跳转到B, A在onDestroy里清空了BitmapUtil.drr数据,导致在B的onCreate方法读取drr数据不为空,但onResume方法中读取的drr数据为空;
视频播放全屏底部白条问题 : 自己调整布局 以及设置 正确的参数 :
surface_view.getHolder().setFixedSize(mSurfaceViewWidth, mSurfaceViewHeight);代码设置TextView的字体大小 :记住默认是以SP为单位的,所以不用再转px了。
setOnScrollListener 滑动监听: ListView第一次初始化就会调用onScroll方法,坑啊
//滚动监听 pull_list_grid.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {// Logger.e("firstVisibleItem::" + firstVisibleItem + " visibleItemCount :" +visibleItemCount +" totalItemCount :"+totalItemCount); if (!TextUtils.isEmpty(keyword)&&!noMoreData && totalItemCount - firstVisibleItem < CommConfig.LetterLoadMore_SIZE && !httpIng) { getMorePage(); } } });
postDelayed 方法中运行的Runable是主线程调了Runnable的run方法而已,细节忘了,坑。。。。
postDelayed(new Runnable() {
@Override
public void run() {
}
},1000);更新umeng : 从4.6升级到5.0版 真的如官方所说,变化很大,很多api没有了 更新谨慎之
设置 android:allowBackup=”false” 这个属性存在bug,模式是true,在正式发布app的时候设置为false,但一般项目引用多个第三方库的时候,会存在坑
多个冲突,导致打包APP失败,查看日志也找到了google给出的建议,如下:Suggestion: add ‘tools:replace=”android:allowBackup”’ to element at AndroidManifest.xml:89:5-1052:19 to override.
所以添加 :
tools:replace="android:allowBackup"
8.使用优测,发现一些安全漏洞和一些bug 但TM按照给出的修改建议,修改bug后,再测试还是有相同的漏洞,表示很坑啊。。。。
9.TextView 同时显示表情和文字, 可能存在表情被遮挡部分或者文字表情不居中显示bug, 操蛋,这个调试了好久,尝试过设置表情大小,文字大小,发现都不能根本解决问题,调试好久,
最终发现设置TextView的高度为wrap_content是不行的,要设置为相应的高度值 ,比如20dp 就OK了
10.自定义属性和support:appcompat-v7:22.2.0包属性冲突 : 根本的解决方法都是更改自定义控件的属性,但因为我的项目中大量使用了这个控件,以及项目紧张,
所以找了一个暂时的解决方法
<attr name="title" format="string" /> <attr name="titleTextSize" format="dimension" /> <attr name="titleTextColor" format="color" /> <attr name="title" /> <attr name="titleTextSize"/> <attr name="titleTextColor"/>
最后,我抽空写了一个java程序,修改了所有使用这个控件的属性方法,从源头解决方法
- APP启动显示默认的启动页面(跟微信类似) : 关键代码 android:theme=”@style/AppSplash”
<!--启动页面--> <activity android:name=".activity.login.SplashActivity_" android:theme="@style/AppSplash"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--启动页面主题 可以自己定制 --> <style name="AppSplash" parent="android:Theme"> <item name="android:windowBackground">@drawable/splash_bg</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style>
- Android 开发的时候在Application开启 严格模式,会查找到很多问题代码:
/** * 严格模式开启 */ private void setStrictMode() { if (LogUtil.isDebug && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD_MR1) { StrictMode.enableDefaults(); } }
butterknife 插件使用: 鼠标点到R.layout.activity_main布局 ,再右键Generate–》ButterKnife 选项
MuritaleDex :这个是65536的问题,APP项目功能越来越多,引用越来越多第三方的Jar包的时候,就有很大的概率触发这个问题。Android5.0以上的系统,不需要担心这个问题。
compile ‘com.android.support:multidex:1.0.1’//引用multidex库
leak canary 内存泄漏检测工具 :下面这段代码这能放在项目APP的build文件中,而不能放在任何第三放的aar的build文件中。
真心坑!
//leak canary 内存泄漏检测工具 //https://github.com/square/leakcanary debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
LeakCanary工作原理
•RefWatcher.watch()创建一个KeyedWeakReference到监控的对象。
•接下来,在后台线程中检测这个引用是否被清除,如果没有将会触发GC。
•如果引用仍然没有清除,将heap内存dump到一个.hprof的文件存放到手机系统里。
•HeapAnalyzerService在另外一个独立的进程中启动,使用HeapAnalyzer解析heap内存通过HAHA这个项目
•HeapAnalyzer计算出到GC ROOTs的最短强引用路径决定是否发生Leak,然后建立导致泄漏的引用链。 结果被回传到应用程序进程的DisplayLeakService中,然后显示一个泄漏的通知。
16 . Android高级开发之性能优化典范 值得一看 ,开发规范很重要
17 . LinearLayout中设置android:orientation=”horizontal” ,它的高度以第一个view的高度为准,导致高度不对,解决方法:
在第一个View的外层添加一个LinearLayout ,设置高度为 android:layout_height=”match_parent”
18.multidex引发的后遗症, 当修改MAinActivity的FindFragment为InfoFragment时,会包Dex包中不存在InfoFragment类,其实是因为手机上的dex是旧的dex包,导致没有更新所致,
解决方法是删除掉手机上的APP,然后Clean一下AS工具,重新安装App即可
19.复制保留旧的XML布局文件,时间久了发现后面无法删除,查了好久都没发现什么问题导致,今天终于一点点删除XML布局文件的内容,删除到最后,发现有几个不能删除,一删除就编译错误,
查看最新的XML布局代码中,没有这几个内容,再看Activity中代码,发现在点击事件中,还留存着这几个Id,我擦,原来就是这个问题。
20 . 以后不要保留旧的XML文件 ,容易引发乱七八糟的bug,坑
21 . 融云刷新用户信息无效问题:
不能直接在你实现的类里异步请求更新userinfo,你看日志的会发现,其实融云根本没调用户接口请求,暂时没有去查原因,我的解决方法是通过EventBus消息传到MainActivity中再请求userinfo,然后更新userinfo,解决了更新用户信息的问题。
- 开发APP中遇到的坑
- BAYKEE app开发中遇到的一些问题和解决办法
- APP开发过程中遇到的编译错误及修复
- Htm5l开发App中遇到的一些问题
- android 开发中遇到的错误 app:mergeDebugResources
- 开发中遇到的坑(低级错误)-APP运行调试无法反应点击事件等等
- [APP开发技巧] 新手遇到的坑,你踩中了几个,初识apicloud
- 开发中遇到的坑
- 开发中遇到的坑
- 开发中遇到的坑.
- 探索使用 Unity 开发 Gear VR App 遇到的坑
- app开发 关于证书遇到的问题
- 手机app开发遇到的问题总结
- SharePoint2013 App开发部署遇到的一系列问题
- HTML5快速开发APP遇到的问题
- 分享 Ionic 开发 Hybrid App 中遇到的问题以及后期发布 iOS/Android 的方方面面
- IOS开发中遇到的坑
- 百度地图开发中遇到的坑
- 简单的音乐播放
- 193_AIDL的使用
- LeetCode Excel Sheet Column Number
- Oracle建立表空间和用户
- 数组作数据成员2
- 开发APP中遇到的坑
- HttpClient 组件学习使用
- 输出集合的所有子集
- 194_自定义FastJsonRequest
- 指向学生类的指针(改)
- javascript Location对象
- CodeForces 1A Theatre Square(模拟+简单数学)
- ★【16.6.2】Codeforces Round #355 (Div. 2) C. Vanya and Label
- 设计模式——工厂方法模式