- 博客(36)
- 收藏
- 关注
原创 Android加固方案
反调试:1.调试器状态检测:adnroid:debuggable true可调式 =FLAG_DEBUGGABLEandroid.os.debug.isdebugerconnectrd 判断2.进程状态检测:status 文件 TracePid 这个文件会几率调试者IP,轮询判断TracePid 如果大于0就退出3.模拟器检测:模拟器文件4.root检测:检测是否存在权限管理...
2020-05-03 12:59:35
649
原创 Handler面试题
HandlerHandler :把消息push到消息队列中Message:消息MessageQueue:消息队列looper:管理当前现场的消息队列,有消息就取出机制:handler负责发送和接受looer返回的消息,并处理相应逻辑.looper负责接受handler发送的消息,并把消息传递给handler自己.message是消息,messageQueue是一个容器流程:Loop...
2020-05-03 12:57:54
648
原创 Android面试2.0
线程池:作用:提高创建爱你销毁对象的效率,减少cpu消耗,控制活动线程数量概念:初始化一个多线程应用过程中创建一个线程集合原理:创建一些空闲线程,有请求就分配一个空闲线程处理动画:补间动画:通过平移 缩放 旋转 透明度等完成动画效果帧动画:加载一系列图片属性动画:可以改变控件属性的补间动画视频播放:videoviewmediaplayersufaceviewijkpla...
2020-05-03 12:57:04
171
原创 Android面试题1.0
Android架构应用程序层-框架层-核心类库层-linux内核层activity生命周期:activity从创建到销毁的全过程oncreat 创建onstart oncreat之后或停止状态恢复时调用onresume onstart之后调用(获得焦点)onpause 暂停,停止,销毁时调用onstop 停止,...
2020-05-03 12:56:29
151
原创 Java面试题
面向对象和面向过程面向过程:分析解决问题所需步骤,用函数一一实现并以此调用面向对象:把构成问题的事务分解成各个对象(为了描述整个解决问题的步骤中的行为),面向对象特质:封装:把对象的属性和行为封装起来,就是 类继承:多个类具有相同属性和行为,抽取共性提取父类,创建相似的类只需继承父类多态:多种表现形态,具有多重实现方法,同一个接口,不同的实例而执行不同的操作arrayList 和...
2020-05-03 12:55:44
131
原创 网络请求原理
1.域名解析浏览器按照自身DNS,操作系统DNS,hotsts文件,本地DNS的优先级去找IP地址,若找到就完成解析,若找不到就根据本地DNS服务器请求根DNS服务器,2.TCP三次握手客户端向服务端发情请求报文,服务端收到请求报文并封装返回给客户端,客服端收到服务端的请求并返回,既建立了连接3.发起HTTP请求建立连接后客户端向服务器发送http请求4.响应HTTP请求...
2020-01-12 18:08:03
476
原创 VirtualAPK 插件化的简单使用
第一步:根目录的build.gradle文件的配置apply plugin: 'com.didi.virtualapk.host'classpath 'com.didi.virtualapk:gradle:0.9.8.6'第二步:宿主gradle文件的配置apply plugin: 'com.didi.virtualapk.host'implementation '...
2019-12-12 14:21:54
235
原创 Flutter 开发环境配置
Flutter SDK下载地址https://flutter.dev/docs/development/tools/sdk/releases?tab=windows配置环境变量配置完环境后下载这个插件重启android studio重启后AS就多了这两种创建Flutter的方式...
2019-12-06 15:03:26
175
原创 Android SharedPreferences
获取ShardPreferences的方法1. Context 类中的 getSharedPreferences()方法:2. Activity 类中的 getPreferences()方法:3. PreferenceManager 类中的 getDefaultSharedPreferences()方法:SharedPreferences的使用 1.写入数据: ...
2019-12-06 13:43:07
125
原创 Android 动画种类及原理
帧动画:通过顺序播放一系列图像从而产生动画效果补间动画:是通过对场景里的对象不断做图像变换(透明度、缩放、平移、旋转)从而产生动画效果属性动画:通过动态的改变对象的属性从而达到动画效果帧动画帧动画就是顺序播放一组预先定义好的图片使用:1.在drawable目录下定义一个XML文件( android:oneshot=“false”: 表示是否重复播放动画,还是只播放一次;Draw...
2019-12-06 09:24:40
592
转载 Android view绘制流程
绘制view绘制从跟视图viewroot的performtraversals()方法开始,从上到下遍历整个视图,每个view负责绘制自己,viewgroup还负责通知自己的子view进行绘制操作。视图操作的过程氛围三个步骤,分别是Measure,layout,draw。performTraversals方法在ViewRootimpl中,核心代码为 int childWidthMe...
2019-12-05 15:56:10
102
原创 Android 线程池
线程池1.使用原因:在任务比较多的情况下,为每个任务创建一个线程,在任务完成后又摧毁这些线程,会造成线程频繁的创建和销毁,会占用大量的资源,导致频繁调动GC,容易造成界面卡顿,使性能降低,且非常耗时。2.线程池优点:统一管理,避免资源竞争产生的问题。不需要重复创建,销毁线程,不需要频繁调用GC。且使用方便。线程池:ThreadPoolExecutor public Threa...
2019-12-05 10:21:29
78
原创 虚拟机
虚拟机java虚拟机的结构解析JVM结构 编制和执行 内存管理和GCJVM结构编译流程(javac处理)类加载器(实在动态加载的理论依据)Bootstrap classloader : 加载 loadJRE\lib\re.jar中的class字节码Extension classloader: 加载loadJRE\lib\ext\*.jarApp cl...
2019-08-23 16:50:02
92
原创 Class文件和Dex文件的问题分析
Class文件class文件就是能够被jvm识别,加载并执行的文件。java,scala.python都可以生成class文件IDE可以帮我们build class文件,javac可以生成class文件class文件的作用:是记录一个类的所有信息class文件的数据结构:八字节二进制流文件,各个数据有序紧密排列,每个类和接口单独占一个class文件。class中的字段M...
2019-08-23 16:38:30
235
原创 Android MD5,AES,RSA
AES加密:在一个叫做 state 的字节矩阵上进行,初值是一个16字节的明文区块,加密时,各轮AES加密循环。每次循环有四个步骤:1.AddRoundKey - 矩阵中的每一字节URI与该密钥做XOR运算,每个子密钥由密钥生成方案产生2.SubBytes - 通过一个非线性的替换函数,用查找表的方式吧每个字节替换成对应的字节3.ShiftRow - 将矩阵中的每个横列进行循环式位...
2019-08-23 16:13:10
116
原创 Android 插件化框架
Small流程:创建app,集成small,宿主module中初始化smallstrictSplitResources = false :是否严格执行资源分割创建插件module名字为APP.main 包名为com.example.appmain创建assets文件夹和bundle.json文件记录module信息,所有的插件都需要在bundle.json中添加uri和pk...
2019-08-23 15:57:26
4322
原创 Android 关于插件化
插件化插件化产生的原因:app体积越来越大,功能模块越来越多,耦合度高,开发成本大,方法数过多65535,占内存过大。插件化原理:将一个大的apk按照业务分隔成多个小的apk,既可以独立运行,又可以作为插件运行插件化中的概念宿主:主APP,可以用来加载插件,也成为host插件:插件app,被宿主加载的app,也可以普通app一样的apk文件是跟插件化:将一个应用按照宿主插件...
2019-08-23 11:47:14
175
原创 Android Tinker
Tinker优势:基于classloader的classlaoder开发了自己的classlaoder,基于原声的aapt开发了自己的aapt.基于自己的dex文件格式,研发了dexdiff算法使用流程:集成sdk→配置gradle→初始化tinker(applicaiton)→构建tinker的gradle→TinkerPatch.with().fetchPatchUpdate(true...
2019-08-23 10:23:52
680
原创 Android 热更新AndFix的分析
1.AndFix只能修复方法级别的bug使用流程:添加依赖→封装工具类→生成差异包(.patch文件)→loadpatch方法更新源码:初始化源码:PatchManager→init(比较版本号,删除旧版本)加载源码:addpatch→initPatchs()→addpatch()→loadpatch()→fix()→fixclass()→replaceMethod()→ad...
2019-08-22 16:20:14
236
原创 Android Root
Root通过内核漏洞获取最高权限(superuser)root用户:linux的root用户相当于window的administrator管理员用户,控制操作系统的一切权限操作系统=系统内核+文件系统linux系统= android系统 = linux内核+ 文件系统ext3/4为什么root:一些app需要root,比如文件管理器,root后可以调用linux驱动,随时修改...
2019-08-22 11:59:06
2526
原创 Android 加固应用
1.混淆:Proguard.配置proguard-rules.pro文件,在app的gradle文件中把minifyEnable设置为true开启混淆。(Proguard-rules.pro:配置proguard。通过-keep保留四大组建,application资源,native方法,枚举里,自定义控件,parcelable序列化类,serializeable序列化类,有回调函数的类,实体类,w...
2019-08-22 10:32:46
767
原创 Android 混淆
1.混淆的目的:不想开源应用,为了加大反编译的成本,但是并不能彻底防止反编译2.开启混淆: 通常我们需要找到项目路径下app目录下的build.gradle文件 找到minifyEnabled这个配置,然后设置为true. release{ minifyEnabled true//是否启动混淆 ture:打开 false:关闭 ...
2019-08-21 10:52:43
559
原创 Android MVP
MVPM(model)负责数据的请求,解析,过滤等数据操作V(View)负责图示部分展示,图示事件处理P(presenter)是View和Model交互的桥梁。优点: 单一职责, Model, View, Presenter只处理单一逻辑,解耦,Model层的修改和View层的修改互不影响面向接口编程,依赖抽象,Presenter和View互相持有抽象引用,对外隐藏内部实现...
2019-08-21 10:19:33
162
原创 Android 四大组件
1.Activity是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。在Android App 中只要能看见的几乎都要依托于Activity,所以Activity是在开发中使用最频繁的一种组件。2.Activity的生命周期onCreate:Acti...
2019-08-21 10:12:39
178
原创 Android TCP,UDP,HTTP,HTTPS协议
1.IP协议:网络层协议,保证了计算机之间可以发送和接受数据2.TCP协议:传输层协议,一种端到端的协议,建立一个虚拟链路,用于发送和接受数据,基于重发机制,提供可靠的通讯连接,将报文分割成多个报文段发送。3.UDP协议:传输层协议,一种无连m接的协议,每个数据包都是一个独立的信息,包括完整的源地址和目的地址,它在网络上以任何的可能的路径传往目的地,因此它的安全性,准确性,及时性无法保证。...
2019-08-21 09:18:56
620
原创 Android 关于直播,推流,拉流
1.直播集成的腾讯的互动直播的SDK做到(注册开发者,填写信息,创建项目,下载SDK,导入项目,配置build文件,添加user-pressen权限和Activity权限,在application文件中初始化就完成了集成的步骤。)用ijkplayer的实现播放,ijkplayer功能很强大,它是bilibili基于ffmpeg做的一个轻量级视频播放框架,能播放本地视频,也能播放网络流媒体,...
2019-08-19 17:19:22
7994
1
原创 Android 线程通讯
1.Handler1.1looper:是消息的载体,内部有一个messageQueen,handler发送的所有消息,都会走向这个消息队列,它的looper.loop方法是一个死循环,不断的从messagequeen中取出消息,如果有消息就处理,如果没有就阻塞1.2messagequeen:是一个消息队列,可以向其中添加消息并处理消息1.3handler:是发送消息和处理消息的封装,与...
2019-08-19 15:21:07
196
原创 Android 优化
1.ANR问题(Applicatino not responding)程序无响应1.1主线程被io操作阻塞(4.0后网络io不允许主线程中)。1.2主线程做了耗时任务超过 5秒。1.3Service做了耗时操作超过20秒,这是由于service默认执行在主线程,可以使用IntentService 。1.4BroadcastReceiver的onReciver做了耗时操作超过10秒。处理...
2019-08-19 13:47:14
88
原创 RxJava
RxJavaRxjava是一个在jvm上可观测的序列的异步的基于事件的程序的库RxJava的代码简介,不受逻辑影响,是一种链式编程RxJava是通过可扩展的观察者模式实现的(普通观察者模式中,观察者对被观察者高度敏感,被观察者做出动作或者状态的时候,观察者随之变化。RxJava中的可扩展观察者模式,使用的是一种订阅模式,就是观察者告诉被观察者,我需要你的某某状态,你的某某状态发生变化的...
2019-08-19 10:57:42
627
原创 Android GreenDao数据封装使用
GreenDao这里只讲封装,基础的继承,建表就不在这写了,放个链接,不会的可以去看下。https://www.jianshu.com/p/ec007010fa07这里是P层的查询调用 DbCheck.getInstance().getSqlList(0, "name").subscribe(new HttpSubscriber<List<BeanEntity>...
2019-08-19 09:09:51
328
原创 Android Rxjava+Retrofit+MVP
需要添加的依赖 //Retrofit implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' implementation 'com.squareup.retrofit2:convert...
2019-08-15 15:31:51
141
原创 Android AIDL进程通讯
AIDLAIDL是一种android接口定义语言,主要是为了完成进程间通讯,尤其实在涉及多进程并发情况下的进程间通讯。AIDL可以实现进程间的通讯,比如B进程有一个加法运算的功能,A进程需要这个功能,A进程产生两个数字,把数字传给B进程,B进程计算后把结果返回给A。AIDL支持Java的基本8数据类型。list和map。其他AIDL生成的接口。实现Parcelable的实体。AI...
2019-08-13 16:43:59
84
原创 Android 进程保活
进程保活1,1像素创建一个1像素的activity,透明且无动画切换,打开屏幕时把它关闭,把这些逻辑放在一个service中,并把次service放在另一个线程。这样每次mainactivity开启服务的时候,此线程会更加轻量化,不容易被回收。2,双进程守护 (双服务守护,同理)创建两个进程互相监听守护,其中一个被销毁的时候另一个就把它拉起来。3,监听系统广播或者系统服务...
2019-08-13 11:47:31
111
原创 Android 事件分发机制
事件分发事件分发的本质就是事件传递的过程顺序为:Activity→viewgroup→view一般有点击事件的触发,包括down up move cancle四种状态。每产生一种状态,当前view就会调用onDispatchTouchEvent把该事件发送到当前view,然后通过一个onInterceptTouchEvent方法来判断是否被拦截,如果被拦截就由当前页面通过onTouch...
2019-08-12 15:19:38
81
原创 Android EventBus的使用
EventBus(面试)1.EventBus的的定义事件订阅发布的轻量级框架。是一个android端优化的publish,可以简化我们的通讯过程。2.EventBus的作用实现两个fragment之间的通讯,activity和fragment的交互。简化通讯过程。流程跨多个界面。推送3...
2019-08-12 10:40:24
205
原创 Android ScrollView点击事件和滑动的冲突!
我们都知道ScrollView的滑动事件会拦截点击事件,所以ScrollView的OnClickListener是不生效的,为了解决这个问题我在网上找了很多方法,比如,在滑动事件中添加(arg0.getParent().requestDisallowInterceptTouchEvent(true);)但是经过实践后发现并无法解决实际问题。 然后我自己考虑后,想是否可以把点击事件也在滑动...
2019-05-13 10:40:33
5208
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人