xuensheng

Results 16 comments of xuensheng

1、分区存储 > Android Q可以在AndroidManifest文件中关闭分区存储,Android R只能借助MediaStore相关API进行适配 使用getExternalFileDir或getExternalCacheDir替换Environment.getExternalStorageDirectory 使用MediaStore共享媒体文件 2、限制从后台启动Activity 3、对不可重置的设备标识符实施了限制 使用mac、android_id或移动安全联盟SDK提供的id 4、对电话、Wifi和蓝牙一些API的访问需要定位权限 具体方案 [Android 10适配攻略](https://mp.weixin.qq.com/s/9uVAN3i5o0pCsOFpgRZ9Jg)

* 进度条优化,加载进度未80%时,隐藏进度条 * 标题优化,避免在标题栏暴露加载地址 * 使用缓存,提高加载速度 * 使用https和httpdns,降低运营商劫持率、减少网络延迟、减少请求数据流 * 使用独立进程,独享更大的内存空间,即使加载网络出错导致应用崩溃也不会影响到主进程 * 使用全局代理免流访问 #### 优秀文章 [如何设计一个优雅健壮的Android WebView?(上)](https://iluhcm.com/2017/12/10/design-an-elegant-and-powerful-android-webview-part-one/) [如何设计一个优雅健壮的Android WebView?(下)](https://iluhcm.com/2018/02/27/design-an-elegant-and-powerful-android-webview-part-two/)

1、频繁绘制和对帧率要求比较高的需求,比如拍照、视频和游戏等 2、SurfaceView有独立的绘图表面,可以在子线程中进行绘制,缺点是不能够执行平移、缩放、旋转、透明渐变操作,TextureView的出现就是为了解决这些问题 3、SurfaceView的使用方法,大概是获取SurfaceHolder对象,监听surface创建,更新,销毁,创新一个新的线程,并在其中绘制并提交 4、TextureView并没有独立的绘图表面,在使用过程中,需要添加监听surfaceTexture是否可用,再做相应的处理

> 主要是现在有些应用程序,甚至大厂的app,对权限的滥用,造成app在后台还是在不断的请求网络和监听一些事件,甚至会为了所谓的保活,在全家桶内的app关联启动,造成手机电量急剧消耗。 把自己做好就行

[中文官网介绍](https://developer.android.google.cn/about/versions/nougat/android-7.0)

RetryAndFollowUpInterceptor:负责失败重试以及重定向。 BridgeInterceptor:负责把用户构造的请求转换为发送给服务器的请求,把服务器返回的响应转换为对用户友好的响应。 CacheInterceptor:负责读取缓存以及更新缓存。 ConnectInterceptor:负责与服务器建立连接。 CallServerInterceptor:负责从服务器读取响应的数据。

优秀文章 [LeakCanary原理解析](https://blog.csdn.net/braintt/article/details/99685243)

``` @Override public boolean onInterceptTouchEvent(MotionEvent ev) { //省略若干代码 // Nothing more to do here if we have decided whether or not we // are dragging. //1、move再次进来时mIsUnableToDrag为true if (action != MotionEvent.ACTION_DOWN)...

#### 日志解析命令 ##### ndk-stack   此命令即可以即时定位也可以将日志文件输出到某个路径后再定位,两者的区别在于后者比较灵活,可以再次分析,可查看文件名、方法名和行号 ##### addr2line   根据名称的理解,意思是将地址转换成行号,没错,确实是这样的,日志文件中只有内存地址,对我们来说毫无意义,因此,我们要使用此命令将内存地址转换成我们能够看得懂的信息,如文件名、行号,缺陷是此命令不提供方法名 ##### objdump   将so文件转换成asm(汇编)文件,在asm文件中通过内存地址即可找到发生问题的方法名 #### 线上分析   上面的这些命令只能够进行本地分析,如果说用户的手机发生了native crash怎么办呢?这种情况我们需要集成收集BUG的相关SDK ,如Testin,集成后,如果有客户发生错误,我们就可以在Testin后台查看定位信息了 #### 两种方式 ##### 1、单个查找 * 在日志文件中根据包名查找指针地址 * 使用addr2line将地址解析成具体的行号 ##### 2、全部查找 * 直接使用ndk-stack命令即可 #### 参考链接...

* 少用枚举类型 * 优先使用Parcelable而不是Serializable * 在onDraw方法中不要创建对象 * 给RecyclerView的item设置点击事件时使用同一个listener对象