Android
文章平均质量分 56
不语风来去
这个作者很懒,什么都没留下…
展开
-
Service启动与销毁时的生命周期探究
前言启动Service的方法有两种 StartService 和 bindService,但是在它们调用之后,再调用stopService和unbindService时,service会表现为调用不同的生命周期。我们在对Service进行插件化时,如果需要模拟更真实的Service的生命周期,需要梳理清楚其调用时机与调用关系(不考虑onStart函数)启动服务情况1依次调用方法生命周期表现startServiceonCreate() onStartCommon()sta原创 2022-05-05 16:50:50 · 337 阅读 · 1 评论 -
Activity启动流程 基于android11
ActivityManagerServicestartActivity()ActivityTaskManagerServicestartActivity()startActivityAsUser()getActivityStartController() ...obtainStarter()ActivityStartControllerobtainStarter() ...execute()DefaultFactoryFactory.obtain //此处生成ActivityStarte原创 2021-09-14 16:02:20 · 651 阅读 · 0 评论 -
Activity_通过Hook PackageManager了解动态代理
示例 private static void hookPM() { try { //获取ActivityThread对象 Class<?> activityThreadClass = Class.forName("android.app.ActivityThread"); Field field = activityThreadClass.getDeclaredField("sCurrentActiv原创 2021-08-18 17:51:52 · 755 阅读 · 0 评论 -
如何生成smali文件
1. 创建任意java文件(以Hello.java为例)public class Hello { private static String HELLO_WORLD = "Hello World!"; public static void main(String[] args) { System.out.println(HELLO_WORLD); }}2. 将java文件生成.class文件执行 javac Hello.java 生成 Hell原创 2021-08-11 13:45:02 · 409 阅读 · 0 评论 -
敏捷开发_Studio中的模板信息
快速为方法添加注释原始方法在方法上方输入 /**,敲下 Enter 即可快速生成方法注释为方法注释添加快捷键(下图设置快捷键: alt+d)在文件中添加代码模板$des$ : 不设置函数,用于光标定位$date$ : 设置函数 date(),可自动生成日期模板示例:/** * * @describe $des$ * * @author ypf * * @date $date$ * * */...原创 2021-08-10 17:50:11 · 71 阅读 · 0 评论 -
Android系统的启动流程
原创 2021-07-24 09:03:31 · 108 阅读 · 1 评论 -
Java四大引用
强引用GC不会回收示例Object obj = new Object();软引用内存不足时回收,常用于记录缓存图片示例 private void test(){ User userObject = new User("小明",20); SoftReference<User> softReference = new SoftReference<>(userObject); userObject = null;原创 2021-07-16 11:38:23 · 51 阅读 · 0 评论 -
Android_Binder机制
Binder是什么Binder就是Android中的血管。在Android中我们所使用的Activity,Service等组件都需要和AMS通信,这种跨进程的通信就是通过Binder完成。我们的App和AMS不属于同一个进程机制: Binder是一种跨进程间通信机制驱动:Binder是一个虚拟物理设备驱动应用层: Binder是一个能发起通信的Java类...原创 2021-07-15 12:59:21 · 151 阅读 · 0 评论 -
Handler工作机制及相关问题
Handler工作机制本身是一个传送带模型Handler向传送带上输送Message的搬运工调用 Handler.sendXXX() 发送MessagesendXXX相关函数,最后都会调用 Handler.enqueueMessage(),然后调用 MessageQueue.enqueueMessage()函数将message放置到MessageQueue即消息队列中中每一个Handler中都包含一个MessageQueue对象 ,该MessageQueue对象由 与该Handler 绑定原创 2021-07-09 14:05:52 · 152 阅读 · 0 评论 -
Jetpack_dataBinding
开始使用1. 在moudle的build.gradle中开启对databinding的支持 defaultConfig { applicationId "com.example.databinding_viewmodel_livedata" minSdkVersion 15 targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrume原创 2021-07-04 22:53:03 · 198 阅读 · 1 评论 -
Jetpack_Viewmodel_liveData
ViewModelViewModel 可以理解为一个ViewModelStoreOwner(例如: AppCompatActivity)实现类的 数据存放容器;以AppCompatActivity为例 , 该容器的数据一直跟随activity存在,并在Activity销毁时才会被销毁,ViewModel中的数据, 在Activity意外重建时(旋转屏幕)不会丢失.ViewModel 与 其依附的Activity相关, 被存放在Activity的 ViewModelStore(可理解为Map集合)原创 2021-07-04 16:17:41 · 82 阅读 · 0 评论 -
Jetpack_LifeCycle
LifeCycle的好处可以创建感知生命周期的控件控件可以在内部管理自己的生命周期,降低耦合度省去了在各个界面生命周期中的重复代码,也降低了内存泄露的风险Activity Fragment Service Application均存在对LifeCycle的支持LifeCycle的使用内部实现采用了 观察者模式Activity Fragment Service Application相当于被观察者实现了LifecycleObserver接口的对象,可以作为观察者,添加进入被观察者原创 2021-07-02 19:45:25 · 69 阅读 · 0 评论 -
JNI示例
java调用Cjava中的native方法声明public class JniController { { System.loadLibrary("jniLib"); } //计算两数之和 public native int sum(int x,int y); //处理字符串 public native String sayHello(String s); //处理int数组 public native int[]原创 2021-06-28 15:52:23 · 170 阅读 · 0 评论 -
JNI中的实用方案
为包含native的类创建头文件将控制台转移到 …/main/java 目录下,如图所示:获取包含native方法的类的全类名,并执行如下命令以CallJavaController类为例javah com.example.jnidemo.CallJavaController将生成 .h文件放置到 jni目录中,与 .c文件同级目录,并在.c文件中引入#include "com_example_jnidemo_CallJavaController.h"...原创 2021-06-28 15:40:14 · 90 阅读 · 0 评论 -
Android JNI_环境配置
安装与配置1. 下载NDK如果你需要CMakeList.txt中使用一些高级的语法,则需要安装高版本的CMake2. 在Sutdio中配置下载的ndk3. 在main目录下创建 jni目录,并在该目录下创建 C文件文件名称可自定义,但是必须与下一步中CMakeList.txt文件中的源文件名相同4. 在app目录下创建 CMakeList.txt 文件文件名称必须是 CMakeList.txt,指定的源文件地址 必须是上一步中创建的C文件的相对地址,内容如下:#创建一个库(可通过原创 2021-05-31 14:49:58 · 1347 阅读 · 0 评论 -
深入理解ViewGroup的dispatchTouchEvent()
关于ViewGroup的dispatchTouchEvent()1. (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;parent.requestDisallowInterceptTouchEvent(true) 与之关联parent.requestDisallowInterceptTouchEvent(false) 一旦设置,parent会给child派发 CANCEL 事件,并从触摸树中剔除,自此,设置该属性的View在 此系列事件 中将不再接收原创 2021-04-22 18:30:41 · 482 阅读 · 0 评论 -
Android中View移动的几种方式
View移动的几种方式1. offsetLeftAndRight() 和 offsetTopAndBottom() (推荐)实现的是对view的移动offsetLeftAndRight(int offset): 水平方向挪动View,offset为正则x轴正向移动,getLeft()和getRight()会变。offsetTopAndBottom(int offset): 垂直方向挪动View,offset为正则y轴正向移动,getTop()和getBottom会变。2. scrollBy()原创 2021-04-22 15:44:23 · 2554 阅读 · 0 评论