![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
android
文章平均质量分 50
android
王者之路001
解决问题才是王道!
展开
-
Android APP息屏状态下收到通知解决方案
Android APP息屏接收通知解决方案原创 2022-06-29 15:20:37 · 4295 阅读 · 15 评论 -
Android手机拍照APP闪退问题及应对措施
近日,在APP上进行手机拍照,发现很奇怪的问题:就是在进行拍照的时候,APP会闪退,然后功能不正常;而且,闪退是非必现的——也就是多次操作肯定会出现,但并不能确定出现的时间和原因。当时,找了各种原因,刚开始都以为是自己程序写的有问题,但由于是非必现,就可以基本上认为该结论不成立。又怀疑是高德地图的问题,但更换高德地图的SDK以后,发现问题依然存在。在随后的几天里,进行了多次试验和相关资料搜索,最终确定是拍照过程中造成的。并有如下基本资料:部分Android机型,如oppo(鄙人的手机不幸就是oppo原创 2022-02-17 11:46:05 · 4075 阅读 · 0 评论 -
java.lang.OutOfMemoryError
近日,用Bugly追踪到一个奇怪的崩溃:# OkHttp Dispatcher(1604)java.lang.OutOfMemoryErrorpthread_create (1040KB stack) failed: Out of memory很奇怪,这个错误貌似不正常。大致猜测该问题原因为创建线程时的错误。继续研究,发现该问题主要在华为手机上,找出资料为“在Android7.0及以上的华为手机(EmotionUI_5.0及以上),这些手机的线程数限制都很小(应该是华为rom特意修改原创 2022-02-10 18:30:00 · 1459 阅读 · 0 评论 -
CountDownLatch的用法
今日试图解决一个问题,就是在Android中实现多线程同步,但要求几个变量同时同步。当时,首先想的是,一定得用Android或JAVA的本身机制。发现有个叫CountDownLatch的机制。CountDownLatch多线程同步类,可以协调多个线程之间的同步。CountDownLatch的典型用法如下:1)创建一个CountDownLatch实例,并确定需要等待的线程或任务数;2)一个线程或任务完成,CountDownLatch计数器减一;3)使用CountDownLatch.原创 2022-02-10 16:24:34 · 1674 阅读 · 0 评论 -
Android中getActivity()为null
通过bugly,追踪到一个崩溃,发现问题为在Fragment里getActivity()为null后崩溃。于是,深层次找原因。发现根本原因为:JVM在内存不足的情况下,会把Activity回收;而Frament和Activity的声明周期不一致,此时Frament不一定会被回收;因此,才导致getActivity()为null的问题。Activity生命周期如下:Fragment的生命周期如下:因此,可以用的解决方法是:对Activity添加引用,保证Acitivit原创 2022-02-08 14:36:05 · 1751 阅读 · 0 评论 -
遇到了ANR错误
最近在解决一个Android问题。问题现象如下:手机进行上传的时候,任务太多,会报错误,甚至会提示“无响应,是否关闭”。显然,这是遇到了ANR错误,也就是Androdi手机无响应错误。这种错误的原因为:Android为了快速响应,把有关图形操作的相关任务,都放到了主线程;但如果主线程过分繁忙而没有响应,相关错误就会产生(When the UI thread of an Android app is blocked for too long, an "Application Not Respondin原创 2022-01-29 17:56:26 · 1645 阅读 · 0 评论 -
Android读取程序中文件
近日,需要完成一个程序,需要把相关文件放到Android程序中,并共Android读取。Android读写文件很简单,如果用JAVA语言的话,就是JAVA文件读写。真正的问题在于,在Android程序中,应该把文件放到哪里,才能保证能可以读取。继续查找相关资料,得出如下结论:1)Android中有raw和assets两个文件夹下的文件,可以不编译为二进制文件,把相关文件放到这两个文件即可。2)raw文件目录为res/raw,相关文件会被映射到R.java,访问时直接通过资源ID访问;原创 2022-01-17 18:40:02 · 2700 阅读 · 0 评论 -
android static变量陷阱
最近发现Android的APP一直出问题,一直找不到原因。于是,我装上了Bugly进行跟踪。果然,跟踪到一个奇怪的异常,异常显示一个static变量为一个非常奇异的值。第一眼感觉很奇怪,在笔者的印象中,static为静态变量,是一个全局数据,不应该为异常值,非常困惑。于是,继续学习相关资料,了多篇博客介绍android的static的变量存在陷阱的。文章链接如下:[1]安卓全局静态变量中的坑_三月的船长-CSDN博客[2]为何Android开发中不推荐使用static全局变量传参_修的专原创 2022-01-11 17:24:49 · 1927 阅读 · 0 评论 -
使用Bugly 作为APP异常上报工具
0.需求最近发布的APP,用户反馈遇到了一些稀奇古怪的崩溃。本地测试,一定程度上无法覆盖所有的case。加之用户使用场景和本地场景存在一定差异性。这难免会造成一些稀奇古怪的崩溃,且不易复现。突然想到,微软也在做一件事,就是每当程序崩溃以后,总要把一些崩溃上报。显然,APP也把崩溃进行上报,也是一个好思路。继续发现,好些大厂都已经提供了完整的APP上传工具和机制。但如果是站在工程师的角度,如果资源不够的话,重新设计一套工具,显然是不合适的。于是,想到了是否有公开的可以直接用APP异常上传工具和“轮原创 2022-01-07 16:38:28 · 4502 阅读 · 5 评论 -
Android界面点击无正确响应
最近,在解决一个Android问题,发现Android界面的点击使用无正确响应。分析可得:点击界面--->视图接收点击消息--->对应消息函数运行。首先想到的,是视图上有无新界面遮挡。经调试以后,发现并无该问题。继续研究,发现视图有点击过程和接收过程,但比较奇怪的是,没有对应的接收视图收到相关消息。继续研究,发现界面过程如下:1)界面自己制作了适配器(Adapter);2)每次会根据实际数据new新的适配器;3)视图和适配器绑定。而由于每次重新生成适配器且和视原创 2022-01-04 15:28:54 · 2566 阅读 · 0 评论 -
开发中碰到的问题:java.lang.IllegalArgumentException: quality must be 0..100
今天原创 2021-10-22 10:24:17 · 857 阅读 · 0 评论 -
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1
今天android程序发生了一个异常,查询日志后发现日志如下:java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)at java.util.ArrayList.get(ArrayList.java:308)at android.widget.HeaderViewListAdapt原创 2021-10-19 18:19:40 · 1748 阅读 · 0 评论 -
解决java.lang.IllegalStateException: FragmentManager is already executing transactions 问题
今日遇到一个问题,发现在点击APP过程中,程序崩溃了,并显示出如下问题。java.lang.IllegalStateException: FragmentManager is already executing transactionsat android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:2006)at android.support.v4.app.FragmentManagerImpl原创 2021-10-12 17:04:20 · 6954 阅读 · 3 评论 -
散记一篇:首页菜单有序化排列
Android的APP的首页一直有一个问题,问题为首页需要类似美团首页形式。如下图所示:最开始的做APP,采用RecycleView并使用GridView作为布局;但非常遗憾的是:该布局并不适合所有的手机;但手机屏幕分辨率不同时,会显示不同菜单个数,并造成翻页问题。笔者最开始的想法:使用RecycleView解决该问题。但试验了各种RecylcleView方法,发现目前的成熟的解决方案都其实有各种问题,至少并无直接可用的方案。然后,搜索美团界面,找到了如下样例:GitHub - Hey.原创 2021-10-11 15:44:22 · 91 阅读 · 0 评论 -
Android中发送广播消息刷新Fragment
近日需要完成这样的功能:一个页面(Fragment)刷新以后,需要刷新多个页面的Fragment。我首先想到了,是观察者模式的升级版:发布-订阅模式。加之笔者用Otto做过发布-订阅功能(Android在另一个类中获得Http消息_wangzhezhilu001的专栏-CSDN博客),因此首先就想到这个模式。在确定该功能能完成通知的同时,在想能否用其他模式来完成。想到了Android四大组件之一的广播。继续研究,发现广播组件即为发布-订阅模式。首先第一个选择是:静态注册广播还是动态注册广原创 2021-09-16 09:52:25 · 882 阅读 · 0 评论 -
没考虑多任务的Android程序
最近一直在忙着对团队的Android程序进行重构和升级,但发现原来的Android程序压根没有考虑多任务问题。典型代码如下:上传照片代码(伪代码,说明问题为主);原来代码的含义是让上传图片不超过4个,否则出错。if(mPicList.size() != 4) { //上传代码函数 httpPostPic(); //伪代码 } else { Toast.showText(this, "最多上传四张"); //返回不能上传的对话框}原来的工程师这样想:如果图片上传原创 2021-09-10 15:11:45 · 67 阅读 · 0 评论 -
调用MediaPlayer出错“E/InputEventReceiver: Exception dispatching input event.”
今天,在Android中调用MediaPlayer,发现MediaPlayer出错了;比较奇怪的是,在步骤中并无普通的出错步骤;出错的日志如下。E/InputEventReceiver: Exception dispatching input event.E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallbackE/MessageQueue-JNI: java.lang.IllegalStateExcep原创 2021-09-03 15:24:50 · 1251 阅读 · 0 评论 -
Glide无法显示图片问题解决
这几天,碰到一个诡异的问题,发现原来Android上好好的图片,无法显示了。经过代码比对,也一直找不到问题。没办法,只好调试代码吧,发现让图片显示的程序为: Glide.with(mContext).load(FileDataUrl + TaskImage + mLst.get(position).getImg()).thumbnail(0.1f).into(myHolder.mimage);于是,怀疑这部分代码是不是有问题。查询相关说明:Glide的使用说明如下:Glide原创 2021-08-31 14:27:08 · 5590 阅读 · 0 评论 -
Android调用高德地图服务
高德地图服务是常用的地图服务接口,在进行Android开发的时候,可以用高德作为地图服务。高德地图作为接口,其实是有一定规范(keng)的。Android调用高德地图的规则如下:1.需要调用高德地图的库要使用高德地图,必须用高德地图的库。高德地图库的导入,有多种方法。笔者目前所用IDE为Android Stdudio,以Android Studio为例进行说明。高德地图库调用,有方案为在build.gradle文件里添加依赖库,但参考高德官方文件,最好的方法依然是,直接导入库。And原创 2021-08-25 19:11:45 · 3695 阅读 · 0 评论 -
Android目录重构过程
近日,需要对Android代码进行重构。重构的原因为,原来的Android目录,确实很乱;代码本身文件目录和实际内容关系非常乱,让人无法对代码进行统一确定。于是,笔者研究如何对整个目录进行调整和重构。首先,想到的是对目录改为经典的MVC格式;但发现似乎并不完全符合要求,因为本产品运用了一定的第三方库。于是,参考业界成熟的库,参考了如下文献:https://toutiao.io/posts/7skj3b/previewhttps://www.zhihu.com/question/4551原创 2021-08-23 16:21:16 · 142 阅读 · 0 评论 -
Android在另一个类中获得Http消息
近日试图用Android发送Http消息,于是用到了Android中Http库,试用的库为OKHttp库。试用以后发现该库存在如下问题:1)Android中已经不支持同步获得HTTP方式;2)只能用异步中获得Http消息,目前主流的OKHttp接口方法为:在OKHttp中调用匿名回调函数,然后获得Http相应。如下所示://1.创建OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder()原创 2021-08-17 09:53:20 · 152 阅读 · 0 评论 -
Android Handler
1.什么是Handler Handler是一个消息分发对象。Handler是android中提供的消息处理机制,主要用于更新UI。 Handler本质是一个消息队列,用于消息的收发。2.Handler的作用 Handler其实是消息收发没有什么本质区别;Handler机制提出是因为:1)在Android中,UI操作只能在主线程中来完成,子线程的相应操作必须让主线程来完成;2)但如果主线程对UI操作没有顺序,则会造成界面混乱;3)而采用加锁方式,则会造成界面卡死;...原创 2021-08-11 09:35:55 · 100 阅读 · 0 评论 -
android上java.util.ConcurrentModificationException错误解决
今天在运行Android代码,发现程序崩溃了,发现错误为“java.util.ConcurrentModificationException ”,错误栈在list里面。然后,看异常变量,为list本身错误。笔者马上想起来了,list和vector 的区别:1)list是非线程安全的,vector是线程安全的。2)这造成list本身比vector操作更快,但也更不安全。马上想到用vector替换list。然后,发现还是有问题,提示如下:java.util.ConcurrentMod原创 2021-07-08 10:25:55 · 1873 阅读 · 0 评论 -
Android适配器之BaseAdapter
1.BaseAdapter是什么 BaseAdapter是一种Adapter,在Android中,Adapter为适配器,可以构建数据源与视图展示的桥梁,从而让数据源与视图展示相互关联,同时又解除耦合。Adapter与数据源、视图展示的关系如下。 这其中,BaseAdapter是其中最有名的Adapter,提供了ListAdapter和SpinnerAdapter的接口,提供了适配多种视图(Spinner,ListView,GridView)的接口。(详见https://t...原创 2021-06-30 10:34:39 · 1755 阅读 · 1 评论 -
Android OkHttp3的使用和原理
近日,部分内一个小伙伴在Android开发中选择使用了OKHttp3作为HTTP库;但问其使用原因,他告诉我:”看到别人使用,自己也使用“。我建议他简单了解下使用库的基本原理;对于工程师来说,不必要做的是重复造轮子;但于此同时,一个优秀的工程师还是很有必要了解轮子的原理,从来方便驾驶的时候可以有更好的加上性能。恰好,我个人也有时间,就简单搜集了下OKHttp3的相关资料,并给他进行了简单交流。一、OKHttp3是什么 OKHttp3本质是一个Http包,具有HTTP协议的...原创 2021-06-24 16:51:42 · 1001 阅读 · 0 评论 -
Android上的抓包工具 Packet Capture
这几天,需要用Android的抓包工具;首先是各种搜索,发现各种软件和方法都不生效。顺道说一句,本人试验各种软件和方法的方法很简单,看各种工具的jie'shao原创 2021-05-27 19:15:28 · 2544 阅读 · 1 评论 -
android设置出错以后对话框提示并返回上一级
今天遇到了如下问题,在Android中,部分从后台中获得的数据会出错,需要给用户一个提示。我的思路是:提供一个出错后提醒的对话框,然后,让用户点击后返回上一个界面。整个程序如下:public class ClassThis extends BaseActivity {public void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); //设置标题原创 2021-05-19 14:04:53 · 295 阅读 · 2 评论 -
android应用调用高德地图提示INVALID_USER_SCODE
研发部一个小伙伴制作了一个Android应用,其中调用了高德地图接口。代码上传到Git库以后, 我在我本地生成应用,发现地图无法选取,应用所获地图列表是空。于是,进行跟踪定位。首先想到的,是我本地的环境有问题。我本地的IDE,即Android Studio的版本为2020-3-1,而小伙伴的IDE为2.2.2。我以为是我本地的IDE问题,于是,进行IDE修改,安装成了Android Studio 2.2.2。然后,发现问题依旧。继续调试,发现问题依旧。继续看,发现有如下错误:“用户MD5安全码未通过原创 2021-05-07 16:13:39 · 2533 阅读 · 0 评论 -
Android10.0上传照片卡死
今日在测同事写的Android程序APP,发现APP在本人的手机上使用拍照出问题了:点击拍照,直接卡死。笔者手机由于手贱,进行升级,现在版本是Andoid10.0。于是,用Android Studio进行调试;笔者以前也学过Android,但其实对Android属于半通不通状态。因此,笔者决定把所有定位过程写一下,正好给懂研发,但不懂新项目的人提供一些解决问题的思路。首先,决定先找到业务入口。查询到相关业务的关键字符以后,在整个程序中,搜关键字符,并在可能的部分打下断点。然后,进行调试。笔者原创 2021-04-12 18:58:13 · 403 阅读 · 0 评论