- 博客(133)
- 资源 (11)
- 收藏
- 关注
原创 【性能优化】使用Perfetto定位应用启动性能的瓶颈
Perfetto是Android 10 引入的系统级跟踪工具,支持Android,Linux和Chrome,用于取代Systrace。相比于Profiler和AGI,它不再局限于应用内,而是可以提供整个系统的运行状态,当我们需要查看应用有没有影响到系统的稳定性和流畅性时,或者反过来用于分析系统对应用运行的影响时,就可以使用Perfetto来进行系统级跟踪和分析。【译】现代Android开发技能 - Perfetto入门Perfetto的使用方式有很多,个人建议使用脚本。它是Perfetto。
2024-08-13 17:45:50
2223
原创 一次c++监听Linux文件目录的实践
inotify_add_watch(inotify_fd, path.c_str(), IN_CREATE | IN_MODIFY | IN_DELETE) // 根据需要添加要监听的事件。// 存储从内核得到的事件集合。目的:监听系统/data/system/dropbox目录,解析出crash和ANR,并上传云端。测试时,发现在监听过程中,点击读取文件内容,出现ANR,最后发现整个监听需要放到子线程完成。// 等待事件发生。// 注册 epoll 事件。// 创建epoll句柄。
2023-10-13 13:09:56
448
原创 room数据库升级
version = 2 // 旧版本为1。直接添加表字段,不升级会报异常如上图。向XXInfo表中插入 total字段。如上等情况需要升级数据库。1.表字段或减少表字段。
2023-06-14 09:05:05
912
原创 ImageView 引起的不必要的麻烦
后面有发现其他引用地方使用相同的资源是正确的,这就说明是问题地方使用资源的问题了,通过检查发现xml里设置的属性是background,而代码里是setImageResource,如果是平时可能很快检查出问题,刚好做主题,最值得怀疑的就是主题资源问题,虽说不是自己写的代码,也记录下,时而勉之。发现一处资源总是不对的,反复检查几套主题资源正确性,发现没问题。overlay做多主题,
2023-06-01 16:29:13
176
原创 ImageView android:enabled失效
特殊场景需要ImageView 默认情况下无背景,满足条件后显示背景,同事点击要有压下效果,无效,由于ImageView默认是enabled状态,所以显示出背景。layout中设置 ImageView。
2023-06-01 11:16:54
509
原创 The style on this component requires your app theme to be Theme.AppCompat
从方法名可以看出是判断是否主题,这里有点不是太明白为啥是这个名字,不过无关紧要,这个方法就是检测传进来的主题属性是否在当前主题里都存在,如果有一个不存在则认为不是主题,从上面可以看出其实就是检测R.attr.colorPrimary属性是否存在,不存在就让你异常,所以解决办法自然有了,那就是在主题里添加这个属性,不过一般加三个,单独加colorPrimary也可以解决问题。2.将application主题也换位Theme.AppCompat // 失败。这个组件会检测主题,通过代码看到。
2023-05-31 09:25:39
2299
原创 依赖的module同名资源引发崩溃
重新命名,不同模块根据功能命名(如果是sdk里有重复资源,本地也要避免重复命名,sdk内部资源命名尽量要有辨识度)如题,APP依赖module A和B,A和B中有Layout资源重复,在需要B资源时,加载的是A资源导致崩溃。
2023-05-29 21:20:36
194
原创 service启动的正确姿势
新的 Context.startForegroundService() 函数将启动一个前台服务。现在,即使应用在后台运行,系统也允许其调用 Context.startForegroundService()。不过,应用必须在创建服务后的五秒内调用该服务的 startForeground() 函数。如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一个 IllegalStateException。
2023-03-14 20:46:05
767
1
原创 通过service跨进程传输数据异常分析
媒体服务提供一个SDK给N多个应用集成,某个应用(A)来一个新需求,需要在service端传输数据MediaInfo里添加一个字段F(String),于是给A一个新版本SDK。看到这里我就想,我传输个数据为啥要回写,而且此处有个判断条件,那么是否可以通过影响这个条件来控制回写数据,而reply对象传进了transct方法。进一步加日志,定位到某次binder传输数据给某个client前数据正常,传输后就变null,说明是跨进程传导致数据异常。从接口说明上看reply似乎可控,于是找到aidl文件。
2023-03-14 15:37:46
333
原创 CopyOnWriteArrayList和ArrayList遍历和删除操作区别
复制出一个新的容器,然后在这个新的容器里进行修改元素的操作,而后面进行的读操作则继续在旧容器中读取。修改完之后,再将原容器的引用指向新的容器,而旧的容器则进行垃圾回收。对一个容器进行修改操作(添加、删除、编辑)时候,不会直接对当前容器修改,而是先将当前容器进行 Copy,CopyOnWrite 原理。
2023-03-06 16:28:59
541
2
原创 livedata+ lambda遇到的坑
这种方案不可取,原因是如果这个livedata有很多个页面都要订阅时,就错误了,setValue方法到不错,可用。两个页面用同一个类,比如Fragment, 这个fragment里订阅livedata。前提:livedata的生命周期比和订阅这个livedata页面长。如果lambda内没有引用外部非静态成员,会被编译程类似单例的类。这是在livedata.observe(this) {lambda内引用外部非静态变量或方法。页面没有正常销毁,又创建一次。一般情况是new出来的。
2023-01-29 18:08:26
1074
转载 为何Google要将LiveData设计成粘性的?
相信很多人在职业生涯的面试过程中都被问过一个问题?面试官:我看你简历上有写LiveData,那你能说说LiveData是粘性的吗?这确实是一个值得深入思考的知识点,今天就让我们站在Google设计者的角度来深入学习一下LiveData。
2022-12-15 10:59:23
156
原创 android view获取到焦点高亮效果如何去掉
1.最简单android:defaultFocusHighlightEnabled="false"或 代码设置binding.xxx.defaultFocusHighlightEnabled = false2.设置view 不要获取到焦点,有些场景会有问题,比如硬件控制焦点那种,会自动将焦点转移到下个可以获得到焦点的view
2022-12-06 11:07:05
1414
转载 ssh生成私钥无法clone或拉取代码
创建私钥和公钥,将公钥设置到git仓库。再次clone,success!换一种加密方式ed25519。
2022-11-11 14:42:33
580
1
转载 Android 设置ImageView宽度固定,其高度按比例缩放适应
首先,定义ImageView,在该ImageView中,我们需要设置属性android:adjustViewBounds="true",他的意思图片是否保持宽高比。切记的一点是该属性需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果。 <ImageView android:id="@+id/img_list" android:layout_width="fill_parent" android:layout_he...
2021-04-01 10:58:55
1278
原创 DialogFragment setCanceledOnTouchOutside NullPointerException
DialogFragment.getDialog.setCancelable(false);DialogFragment.getDialog.setCanceledOnTouchOutside(false);NullPointerException调用时机晚些即可比如在onCreateView中调用
2020-06-09 14:32:39
522
原创 Observable map doOnNext
Observable map和doOnNext跟在.subscribeOn(Schedulers.io())或.observeOn(AndroidSchedulers.mainThread())后面会执行在对应的线程
2020-01-22 14:34:01
400
原创 webview canGoBack() 多次返回true
in shouldOverrideUrlLoading you can't invoke view.loadUrl........} else if (url.startsWith("http://") || url.startsWith("https://")) {// view.loadUrl(url); 此处使用不当,导致如题问题// ...
2019-12-23 17:53:31
2228
原创 remoteview设置渐变色
某些场景如自定义notification设置GradientDrawable效果,需要通过转为bitmap实现,drawable(包含GradientDrawable)转为bitmappublic Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) { Bitmap mutabl...
2019-12-03 16:58:03
429
原创 appsflyer 深度连接
appsflyer 深度连接app分享1.生成h5url,根据要求写h5,第三方社交app通过h5生成分享内容2.点击链接进入h53.点击h5内appsflyer连接(添加深度连接即再连接后加?af_dp=xx),点击跳转APP,app收到的为af_dp值(即深度连接)https://support.appsflyer.com/hc/zh-cn/articles/208874366-...
2019-11-26 16:43:59
1997
原创 一个简单问题搜罗出一堆问题
Web点击按钮无响应(按钮功能是如本地没有app,点击下载,下载后再点击安装)追查出一些问题1.SDK内部搜集设备号,调用tm.getDeviceId()前没有申请权限导致异常,也没有捕获异常,后续流程没有执行到设备号属于隐私,需要额外申请权限2.8.0及以上系统会出现红色报警,无法正常显示页面可以解决域名问题,也可以程序上针对8.0及以上系统关闭该安全策略if (Build.VERS...
2019-11-01 14:39:12
222
转载 PendingIntent, Notification,broadcastReceiver使用遇到的坑
转载自https://www.itread01.com/content/1542816187.htmlPendingIntent, Notification,broadcastReceiver使用遇到的坑使用PendingIntent結合 alarmManager 傳送定時廣播,收到廣播的時候顯示notification的功能,遇到了好多坑。先上程式碼:一、pendingInten...
2019-10-24 18:07:21
698
原创 recyclerview嵌套总结
案例介绍:外层recyclerview(VERTICAL)内层几个recyclerview(HORIZONTAL)CASE 1 内层列表存在滑动位移时,出现不同列表位置错乱情况分析:外层列表ViewHolder复用所致解决办法:1.一个内层列表单独为一个itemtype2.考虑外层onBindViewHolder里对错乱视图进行复位处理CASE 2 上下滑动有卡顿情况分...
2019-10-10 10:39:07
232
原创 android 非SDK API blacklist处理
现象:Android P上的提醒弹窗 (Detected problems with API compatibility(visit g.co/dev/appcompat for more info)用veridex检测一堆问题,优先解决blacklist问题#22: Reflection blacklist Landroid/service/media/IMediaBrowserServ...
2019-08-29 21:49:42
1071
1
原创 andriod 开发随手备忘
btn_record.getLocationInWindow(location); //获取在当前窗口内的绝对坐标btn_record.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标UI刷新确保刷新是在Ui线程,如下面代码在子线程刷新无效adapter.notifyDataSetChanged();...
2019-06-29 10:26:04
140
原创 recyclerview item 高度不正确
recyclerview 添加view一般都会public BaseViewHolder newViewHolder(ViewGroup parent, int viewType) {return new ViewHolderNormal(LayoutInflater.from(parent.getContext()).inflate(R.layout.xxx, parent, false)...
2019-04-17 10:11:41
2909
原创 判断是否在主线程
public static boolean isOnMainThread() { return Looper.myLooper() == Looper.getMainLooper(); return Thread.currentThread() == Looper.getMainLooper().getThread();}public static void assertMain...
2019-04-12 18:26:00
1068
原创 objectbox数据库
总结下objectbox数据库使用中遇到的坑和使用技巧1.编译时xx类找不到,你必须先保证除了数据库相关代码之外的代码中没有错误,可以直接通过命令行执行看具体编译错误原因,最后rebuild下2.objectbox-models别忘记提交版本管控,否则升级会崩溃3.修改表结构记得加@Uid(4279138568760652606L),开发阶段自己决定是否添加,这充其量算个浅浅的坑4...
2019-04-12 17:18:26
466
原创 圆角 RoundedBitmapDrawable
RoundedBitmapDrawable bitmapDrawable = RoundedBitmapDrawableFactory.create(view.getContext().getResources(), bitmap); bitmapDrawable.setCornerRadius(finalRadius); // 圆角bitmapDrawable.setCircular(true...
2019-04-10 21:12:20
246
原创 rxjava备忘
.subscribeOn(Schedulers.io())设置这个会将所有流程都置于线程中包括map、faltmap、doOnNext以及订阅回调等,当然如果在这些操作符之前指定线程则会在指定线程执行rxjava内提供一些线程处理工具控制在Ui线程执行AndroidSchedulers.mainThread().scheduleDirect(new Runnable() { ...
2019-04-10 17:06:33
179
原创 gradle用法备忘
//给生成的apk文件重命名, applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && ou...
2019-04-10 10:55:44
135
原创 SVGA动画方案备忘
想了解SVGA:https://www.jianshu.com/p/dfa16d9d67cd想看看效果:http://svga.io/svga-preview.html想在android项目使用:https://github.com/yyued/SVGAPlayer-Android想在ios项目使用:https://github.com/yyued/SVGAPlayer-Ios坑:...
2018-12-20 17:41:16
1139
转载 android 源码下载
android 源码下载需要工具如下:下载git,安装 官方下载:https://git-scm.com/downloads/,下载python,安装 官方网址:http://www.python.org打开Git Bash,执行命令,我是放在c盘的,路径可自定义git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.g...
2018-11-10 21:34:23
268
原创 java Thread yield notify notifyAll wait sleep小节
sleep:调用sleep使任务进入休眠状态,任务在指定的时间内不会运行,锁没有被释放。yield:此刻让出cpu,所有线程再次竞争cpu使用权,锁未被释放如果Thread1和Thread2都使用synchronized (object),Thread1调用yield,Thread2也不会被执行,要等object锁被释放才可以。wait:使线程挂起,知道线程得到了notify或noti...
2018-11-04 21:53:20
205
原创 tab+viewpager+fragment白屏问题
有两个方案解决:1.viewpager设置setOffscreenPageLimit($tabcount)点评:如果有十几个tab消耗内存太多,不是最佳方案2.viewpager使用FragmentStatePagerAdapter而不是FragmentPagerAdapter点评:使用FragmentStatePagerAdapter可以确保销毁的fragment重新创建...
2018-09-10 15:15:58
1002
原创 MIUI9 关闭USB安装应用弹出提示解决办法
看了许多帖子没有解决问题,这里写下来备忘。安全中心->应用管理->点击右上角‘权限’,进入授权管理界面->点击右上角设置->关闭应用权限监控和USB安装管理(仅关闭USB安装管理无效)建议:自用机器最好别这样设置以免造成损失,因为存在安全隐患终于可以随心所欲写一些脚本操作应用了 ...
2018-05-24 15:49:45
18865
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人