2013年毕业于后一直从事android相关的开发。熟悉framework和app开发的相关知识,业余时间喜欢做些开源(https://github.com/JasmineBen)和写一些文章(https://www.jianshu.com/u/45db8e5d0d30)
https://github.com/JasmineBen/GankMvvm 基于"干货集中营"的开放API,采用MVVM架构、RxJava、dagger2、glide、retrofit、GreenDao、rxpermissions2等技术实现了一个简...
https://github.com/JasmineBen/NetworkMonitor 通过NetworkStatsManager和悬浮框技术,实现了一个应用流量监控的APP,通过输入应用包名可以实时检测应用的流量使用情况,从而帮助用户排查应用的网络问题。
基于Kotlin技术和GankIo开放API实现了一个开源APP https://github.com/JasmineBen/KotlinGank
基于Flutter技术和GankIo开放API实现了一个APP: https://github.com/JasmineBen/FlutterGank
EventBus是一个开源的事件总线项目,项目地址:EventBus EventBus通过注册监听器和发布消息的方式来完成事件的传递,如下所示: EventBus事件传递机制 其中Publisher为事件的发布者,Subscriber为事件的订阅者。
通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长、CPU的使用情况、ANR、布局情况等;相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只能通过代码的方式,这样会导致整个应用比较卡顿,测试出的方法时间,不是真正的执行时间,只能看下时间长短的相对占比。
在AMS中,ActivityRecord对应一个Activity,TaskRecord对应一个Task,每个TaskRecord中保存了若干ActivityRecord,TaskRecord由taskId标识,通过getTaskId()可以获取Activity所属的Task。
ButterKnife(https://github.com/JakeWharton/butterknife)是一款android平台的依赖注入框架,通过该工具可以实现View、OnClickListener的注入,省去了findViewById、setOnClickListener的过程。
部分公司在面试的时候要求手写算法题目,准备算法题目部分也花费了我大量的时间,期间也做了很多道题目,这里我把我做的那些题目和对应解题方案的详细描述都上传到github中,以供学习。
android程序员在面试时都会被问到Java方面的知识,本文整理了部分Java方面的面试题,如下: 0、Java垃圾回收和System.gc的关系 Java根据垃圾收集算法,周期性的进行垃圾回收,回收哪些无用的对象。
最近在准备android面试,整理了下相关的面试题,分为如下三个部分:android部分、Java部分、算法面试题,后续有新内容直接在对应的文章中补充。 android部分:本文 Java部分: https://www.
View的绘制过程从Activity.setContentView开始经过如下方法: Activity.setContentView—>PhoneWindow.
RemoteViews支持在其他进程显示和更新View,由于RemoteViews没有findViewById的方法,因为它是远程的View,即使有findViewById我们也不知道远程app的资源文件id 所以如果想要更新View的内容 就要使用RemoteViews提供的一系列set方法: RemoteViews方法 RemoteViews每调用用一个set方法都会添加一个Action到Action列表中,Action也是序列化的,也可以通过Binder传到远程。
Java的ClassLoder的父子关系如下:Bootstrap--ExtClassClassLoader---AppClassLoader。 JVM启动时先运行启动类加载器Bottstrap,主要加载Java核心API;然后加载扩展类加载器ExtClassLoder,该加载器加载rt.jar中的class;然后再加载应用类加载器AppClassLoader,该加载器加载当前应用CLASS_PATH下的Class文件。
一次Http请求过程 客户端在输入域名后通过DNS服务器解析得到IP地址;得到IP地址后,通过三次握手进行TCP/IP连接;之后就进行通信。 TCP三次握手 TCP在建立连接的时候需要三次握手,第一次握手将Client标志位SY...
Volley是一款轻量级的网络访问框架,适合小批量的数据传输。Volley的使用通过newRequestQueue创建一个RequestQueue对象,并调用RequestQueue.add方法来提交任务。
android通过ContentProvider可以实现进程间的数据共享,例如APP通过MediaProvider可以访问多媒体数据库的内容。通常我们在Activity通过getContentResolver().
android启动Service有两种方式,一种是startService,还有一种是bindService,关于startService的启动流程可以参照https://www.
广播的注册分为静态注册和动态注册两种,android关于广播的源码分析可以参照此文 : https://www.jianshu.com/writer#/notebooks/11066526/notes/28225946 广播的插件化指的是插件能够接受到外部的广播,即插件apk里的Receiver对象能够响应对应的广播。
android提供了广播机制,通过BroadcastReceiver可以在不同的进程间传递消息。类似于观察者模式,A应用通过注册广播表示A对消息subject感兴趣,当B应用发出subject类型的消息的时候,A应用就能收到对应的消息。
插件以APK的形式保存在SD卡上,通过startActivity方式启动Activity需要首先将Activity注册到AndroidManifest.xml,如果没有注册就会出现如下错误。
在进行插件化时,需要先将插件加载到当前进程中来,插件通常以APK的形式保存在SD卡上,VirtualApk加载插件的过程如下:PluginManager.loadPlugin---->LoadedPlugin.create,最终会创建LoadedPlugin对象,该对象就表示插件在内存中的存在形式。
https://github.com/JasmineBen/GankImitation_MVP 基于"干货集中营"的开放API,采用MVP架构、RxJava、dagger2、glide、retrofit、GreenDao、butterknife、rxp...
在Activity中registeReceiver或者bindService,如果Activity销毁时还没进行unregisterReceiver或者unbindService,就会出现如下错误: 1、未调用unregisterReceiver:android.
在Activity中调用startService启动某个Service的流程如下所示: startService的启动流程 在调用Activity.
Https通信流程图 实现Https的单向认证,首先需要生成一个公钥和私钥,并且拿公钥到CA机构进行签名。生成签名证书。证书里面包含数字签名和公钥。
RxJava2的map操作符用于对输入对象进行转换。 map操作图 下图所示为将String的输出转化为Integer的场景。 String转Integer Map的源码解析如下,首先涉及到以下几个类: 1、Observable:被观察者,通过Observable.create创建一个被观察者,即观察者模式里面的主题Subject对象。
简介 LeakCanary是一款开源的内存泄漏检查工具,在项目中,可以使用它来检测Activity是否能够被GC及时回收。github的地址为https://github.com/square/leakcanary 使用方式解析 将LeakCanary引入AS,在Application中调用如下方法,可以跟踪Activity是否被GC回收。
android应用界面的布局如下图所示,一般我们在展示一个界面时会使用一个Activity表示;而Activity时通过Window展示的,android的Window实现类叫PhoneWindow;PhoneWindow类有个mDecor的DectorView全局变量,用来对界面的View元素进行修饰;DectorView用来修饰ActionBar、ContentView(Activity.setContentView);ContentView里面包含了用户自定义的一些子Layout。
本文的分析基于glide 3.7.0源码 glide是google官方推荐的图片加载框架,github地址为bumptech/glide 。glide的强大在于它的生命周期管理(glide可以根据Activity的生命周期自动加载或者暂停图片任务);glide使用了三级缓存(一级活跃缓存、二级内存缓存、三级磁盘缓存);gilide使用了BitmapTool机制对图片内存进行复用,可以防止界面快速滑动时的内存不断申请、释放造成的内存抖动;glide可以使用Thumbnail预览图的方式提高加载速率和加载体验。
前言 每个Android进程只能运行在自己拥有的虚拟地址空间,对于用户空间。不同进程之间彼此是不能共享的,而内核空间是可以共享的。Client和Server进程通信就是利用进程间可以共享内核内存空间来完成底层通信工作的,Client和Server通过ioctl等和内核空间进行交互。
1、什么是Handler A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue.
ImageView的ScaleType决定了图片在ImageView中的缩放形式。本文从ImageView的源码角度,结合图表展示不同ScaleType状态下图片的展示形式。