- 博客(51)
- 收藏
- 关注
原创 Android 查看Js Log
Android 查看Js Log此方法适用于android当H5输出JS Log时,界面上可显示对应JS log。此方法适用于android。需要电脑安装ADB,1.手机USB链接电脑,打开USB调试。2.在Chrome浏览器,在网址处输入:chrome://inspect/#devices3.找到对应的页面点击inspect,可以开始调试,具体方法可自行百度。VConsoleH5在开发分支下添加使用vconsole来查看log和调用各种调试信息。https://github.com/
2022-03-10 15:25:11
4484
原创 Handler源码分析
Android 中的消息机制在我们日常开发中用的比较频繁,我们虽然都会使用,但是还不清楚原理,下面我们就来分析一下Handler的原理核心类介绍1、Handler2、Message3、MessageQueue4、Looper //主线程不需要Looper.prepare() 和 Looper.loop(); //是因为在APP启动时的ActivityThread类的入口方法中已经帮我们 //完成了,并不是说不需要做这些操作(直接在一个线程中new //Handler()是会报.
2022-03-07 18:47:43
464
原创 Android 常见的内存泄漏的场景
常见内存泄漏的场景1、非静态内部类的静态实例非静态内部类会持有外部类实例的引用,如果非静态内部类的实例是静态的,就会间接的长期维持着外部类的引用,阻止被系统回收。public class TestActivity extends Activity { private static Object inner = null; @Override protected void onCreate(Bundle savedInstanceState) { supe
2022-03-02 18:34:24
2686
原创 Android减少内存占用
常见的内存优化点:1、只需要UI提供一套高分辨率的图,图片建议放在drawable-xxhdpi文件夹下,这样在低分辨率设备中图片的大小只是压缩,不会存在内存增大的情况。如若遇到不需缩放的文件,放在drawable-nodpi文件夹下。2、图片优化:颜色模式:RGB_8888->RGB_565降低图片大小降低采样率3、在App退到后台内存紧张即将被Kill掉时选择重写onTrimMemory()方法去释放掉图片缓存、静态缓存来自保。4、item被回收不可见时释放掉对图片的引用:List
2022-03-02 15:34:25
2576
原创 MAT的使用(二)实例分析
1、这里用内部类持有外部类引用导致内存泄漏为例子来分析,错误代码如下:正常页面1问题页面22、反复打开LeakActivity页面(疯狂点击),用as的profiler生成hprof后用mat打开,并过滤一下信息,如下图:可以看到LeakActivity类的个数多达73个明显不正常,基本可以断定发生了内存泄漏,在LeakActivity一项单击鼠标右键,选择Merge Shortest Paths to GC Root,然后在选择过滤掉软、弱、虚等能销毁的引用,如下图所示:选择后就可以看到
2022-03-02 14:59:46
264
原创 MAT的使用(一)使用方法介绍
1、概述想要深入的进行分析并确定内存泄漏,就要分析 疑似发生内存泄漏时所生成堆存储文件(hprof)。堆存储文件可以使用DDMS或者Memory Monitor来生成,输出的文件格式为hpof,而MAT就是来分析堆存储文件的。MAT,全称为Memory Analysis Tool,它是Eclipse的插件, 下载地址 : https://www.eclipse.org/mat/downloads.php。2、生成hprof文件hprof文件的获取要结合实际的使用场景,随便生成一个hprof文件用来分
2022-03-02 14:54:40
8498
原创 Android-ANR
一. ANR概述什么是ANRANR,是“Application Not Responding”的缩写,即“应用程序无响应”。在Android中,如果应用程序主线程在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现ANR。对于输入事件没有处理完毕产生的ANR,Android会显示一个对话框,提示用户当前应用程序没有响应,用户可以选择继续等待或者关闭这个应用程序。ANR类型ANR一般有以下几种场景:二.ANR原理ANR触发流程ANR是一套监控Android应用响应是否及时的
2022-03-02 14:09:22
687
原创 ViewModel
Jetpack之ViewModel那些事ViewModel简介在页面(Activity/Fragment)功能较为简单的情况下,我们通常会将UI交互、与数据获取等相关的业务逻辑全部写在页面中。但是在页面功能复杂的情况下,代码量会变的非常多,也违反了"单一功能原则"。 页面只应该负责处理用户与UI控件的交互,并将数据展示到屏幕上,而数据获取相关的业务逻辑应该单独处理和存放。为了解决这个问题,Android为我们提供了ViewModel类,专门用于存放页面所需的数据。ViewModel可以这么理解: 它
2022-03-02 11:08:51
1354
原创 LiveData
LiveData简介LiveData是一个持有可观察数据的类。不同于常规的观察者模式,LiveData可以感知生命周期,即他遵从其他应用组件的生命周期,比如Activity、Fragment或Service等。因此LiveData可以确保只更新处于前台的应用组件观察者。LiveData保护一个Observer类声明的观察者对象(observer),如果LiveData所感知的生命周期处于STARTED或RESEMED状态,那么observer就会被置为激活状态。LiveData只通知处于激活态的
2022-03-02 11:03:58
2342
原创 Java中的线程基础知识
Java中的线程基础知识1、线程概念线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程线程的Java抽象内存模型如下,由此可见1)每个线程都有自己独立的工作内存2)线程1无法访问线程2的工作内存3)线程在访问共享数据时,会把主内存中的共享变量复制到自己的工作内存中,线程操作的是工作内
2022-03-02 10:59:53
1215
原创 Lifecycle原理
1、原理解析1.1 从注册观察者的入口方法开始1.1.1 LifecycleOwner/** * 接口,用来获取Lifecycle对象 */public interface LifecycleOwner { @NonNull Lifecycle getLifecycle();}1.1.2 ComponentActivity、androidx包中的Fragment自身实现了LifecycleOwner接口,并创建了继承了Lifecycle类的LifecycleRegistr
2021-09-23 18:30:24
338
原创 DataBind原理篇
1、APT预编译APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具,确切的说它是javac的一个工具,它用来在编译时扫描和处理注解。注解处理器以Java代码(或者编译过的字节码)作为输入,生成.java文件作为输出。简单来说就是在编译期,通过注解生成.java文件。当你的xml用DataBinding规定的格式去书写的时候,DataBinding就能够通过APT的技术,帮你生成对应的类文件。两个xml文件在编译时,DataBinding会处理布局文件,
2021-09-23 18:22:50
1181
原创 DataBinding使用篇
DataBinding 是谷歌官方发布的一个框架,DataBinding 能够省去我们一直以来的 findViewById() 步骤,大量减少 Activity 内的代码,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常。要将应用配置为使用数据绑定,请在应用模块的 build.gradle 文件中添加 dataBinding 元素,如以下示例所示: android { ... dataBinding { .
2021-09-23 18:17:58
727
1
原创 Lifecycle使用篇
Lifecycle是Google提供的生命周期感知型组件,androidx.lifecycle 软件包提供了可用于构建生命周期感知型组件的类和接口,这些组件可以感知 Activity 和 Fragment 的生命周期状态,让我们在处理一些需要根据生命周期改变而改变的功能的时候显得更加的优雅,避免了在Actvity和Fragemnt中添加大量的处理逻辑和监听逻辑。1、LIfecycle几个重要的类和接口1.1、Lifecycle用于存储有关组件(如 Activity 或 Fragment)的生命周.
2021-09-02 12:43:32
1529
原创 Android常用抓包工具—Charls(青花瓷)
日常开发一般都会用到抓包工具,好用还能提高工作效率。下面介绍如何在mac上使用Charls(青花瓷)我用的版本比较老是4.211、下载地址下载地址–https://www.charlesproxy.com/2、破解一下子3、pc端设置4、手机设置代理配置证书5、开始抓包看数据吧...
2020-06-15 10:27:33
5398
原创 第一次创建仓库的时候没有添加.gitignore文件之后再添加不生效问题
原因:.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的解决方式先把本地缓存删除,然后再进行git的提交,这样就不会出现忽略的文件了。1、先清除本地的缓存,让所有文件都变成不被追踪的状态(untrack)git rm -r --cached .2、再把你要添加或者修改的.gitignore文件添加到你项目的对应位置3、最后再重新提交整个项目的代码,因为现在都是untrack文件了,.gitignore文件生.
2020-06-02 14:52:48
3360
原创 Android7.0使用FileProvider的时候容易出现的问题
Android7.0之后,应用间传递文件有两种解决方案,一种是开启严苛模式并关闭对文件的检测,第二种就是Google推荐的使用FileProvider去适配新的版本。1、FileProvider的使用,这个一般都会放两个图片完事2、使用时可能会出现的问题FileProvider的使用 <provider android:name="androidx.core.content.FileProvider" android:authorities=.
2020-05-26 18:02:45
1086
原创 修改手机屏幕亮度
有时候我们会修改到屏幕的亮度比如小说类的app,能实现修改亮度的方式有两种:1、修改界面的屏幕亮度-----这种只对当前页面生效,退出后回复原来亮度(只影响自己的app不修改系统的亮度)2、修改系统的亮度1、修改界面的屏幕亮度的方式 public void changeScreenBrightniss(Activity activity,int brightniss){ if(currentActviityIsDestory(activity)){ ret.
2020-05-19 09:44:55
2078
原创 Android用Webview调用js带参数的方法的时候注意事项
webview调用js方法的时候传参数的时候直接拼接上本地参数是不行的ps:这里只用调用的方法有参数但没有返回值的做例子假如加载的html的代码如下String ss = "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + "<title></title>\n" + "<style>\n" + "img {display: block;max-width: 100%!im.
2020-05-15 11:10:46
1625
1
原创 flutter环境配置
开发flutter app 前要配置一下环境,就跟咱们之前开发android的时候要下载jdk和android-sdk一样,flutter也是一样的:1、flutter sdk的安装和配置2、dart sdk的安装这里我用的mac电脑 windows的也大同小异1、flutter sdk的下载和配置去flutter的网站下载sdk https://flutter.dev/docs...
2020-05-07 11:59:40
329
原创 Dart基础语法
dart 基础语法,很基础所以粗略带过,后面的博客打算只记录一些重要且常用的知识点。数据类型1、字符类型//字符串 --- Stringvar str1 ='Nice to meet you';String str2 = "Nice to meet you too";String str3 = str1 +str2;print(str3);2、数值类型Numbers//in...
2020-04-24 16:51:40
641
原创 Android alias(别名)的使用2
前面记录过用alias来改变app图标的使用方式,这次介绍一下自己的工具类Module中如果有某个sdk必须要在主app的Manifest文件中注册页面的话可以用alias类进行替换下面微信为例如果你想把微信的支付和分享等多等都放在工具类库的Module中回调页面也在工具module中的处理,你可以在你的moudle中声明所需要的回调页面,下面以支付的回调为例,分享的类似 <...
2020-04-24 10:05:22
1008
原创 Android Intent 跳转页面传值数据量过大报错
今天改了一个业务接口,数据格式没有变化,所以细看里面的数据,直接换接口名字然后完美运行,美滋滋。吃完饭回来再点了点商品页到购买页,大部分商品都能正常的跳转,突然点了到了一个商品跳转支付页面时候直接崩溃。1、崩溃了也行啊,你倒是正常报错啊,不知道是我studio版本的问题还是手机的问题亦或是电脑问题,反正就像是连着线错误一闪消失变成其他的误导错误最后为什么出现不了错误日志我还没找到原因,解决...
2019-12-30 12:42:33
2721
1
原创 Android x 适配
Android x 感觉早晚都要用,适配成本比较低的话,不如就换了吧。1、升级前提Studio版本 >= 3.2.0 越新越好Gradle版本 >= 4.10CompileSdkVersion >= 282、一键转换3、如果你版本比较高,你什么都不需要弄一键转换就行了,如果转了之后导包有问题的,检查一下java文件和xml文件,一些第三方的包有问题的自行处...
2019-12-24 17:49:21
528
原创 okhttp获取接口响应中的Session
有的时候服务端要完成一个功能会提供我们多个接口,服务端在第一个接口中保存了一个session,在后续接口中服务端会用这个sessionid获取一些数据完成后续逻辑。但是有的时候从android端调用的接口,服务端获取不到Session,ios、h5都可以就你不行,他就会让你看看是咋回事呢?这种情况就需要我们手动操作一下了:我们先从第一个接口的response中获取到session保存下来,...
2019-11-26 17:32:14
3228
原创 Fragment数据懒加载
ViewPager加载较多个Fragment的时候为防止频繁访问接口,只加载当前显示页面的数据。/** * 数据懒加载方式 * 原理: * 1、该页面是否首次加载(当数据加载完成之后,置反) * 2、页面是否可见 * 3、控件是否初始化完成(view的初始化虽然实在onCreateview方法中进行的但是在该发放中记录变量的话不一定准确,根据生命周期来看,onActivityCre...
2019-10-24 10:09:51
270
原创 Service生命周期
服务的生命周期start方式 ps:无论start多少次onCreate方法只执行一次start一次onStartCommand方法跟着执行一次bind方式start+bind 方式Todo
2019-10-15 15:27:14
142
原创 Android 版本适配
Android 版本适配先粘贴几个别人的,有时间写一个https://blog.youkuaiyun.com/wangxueming/article/details/99671618https://blog.youkuaiyun.com/weitao_666/article/details/89373615可能会遇到https不能访问的问题如果运行 Android Q 的应用将 null 传递给setSSL...
2019-10-10 17:18:04
383
1
原创 通过设置别名的方式修改app的icon
主要用到的就是 activity-alias别名 (我的理解:跟pc的快捷方式类似)1、要在清单文件中给你的启动页设置别名 <!-- 假如这是你的启动页--> <activity android:name=".SplashActivity" android:configChanges="ori...
2019-08-30 15:13:03
399
原创 Android用RecyclerView实现瀑布注意事项
RecyclerView实现瀑布的过程中遇到的问题,记录一下1、刷新的时候图片闪烁问题这个问题是图片没有固定宽或者高,在复用的时候大小变化导致的。解决方式:1、一开始就根据图片的比例设置宽高2、图片加载框架加载图片的时候设定图片的宽高(其实就这一步就行)2、列表最上方,留白问题mRecyclerView.addOnScrollListener(new RecyclerVie...
2019-08-30 11:36:44
162
原创 Android Gradle 更新到 3.4.1 问题记录
Android Gradle 更新到 3.4.1 问题记录1、多渠道打包会出现问题属性不能用的问题打包维度不统一的问题2、之后就是提示你修改 complie 、testCompile、apt、等等最后还有几个自身项目中导致的问题1 、Cannot create variant 'android-aidl' after configuration':xxxxxxxx:debugApiElement...
2019-07-23 18:24:52
5688
原创 通过WebView的shouldOverrideUrlLoading的方式拦截网址时的注意事项
1、网址中不要有空格2、最好用http开头,https也行3、通过api代码获取html的参数的时候去掉网址中的#号4、注意返回值 是否拦截以后的操作
2019-05-16 18:59:25
1374
原创 记录遇到过的问题
记录遇到过的问题1、Connetction refused (Connection refused)2、后续的慢慢记录1、Connetction refused (Connection refused)问题可能是你之前设置过代理,As就把你的代理配置缓存到了gradle.properties文件中了,每次编译的时候都会读取这个配置,所以即使你去掉代理也是不行的,你要把gradle.proper...
2019-01-22 14:50:09
883
转载 ScrollView和WebView滑动的距离
ScrollView的时候:使用场景:1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动到底部或者顶部2. ScrollView滚动到顶部或者底部时主动触发一些操作(典型的就是滚动到底部触发自动加载操作) 两种方式:1. onScrollChanged方式,自己计算2. onOverScrolled使用系统计算的结果,api >= 9才支持...
2018-11-15 18:47:03
1192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人