自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Handler续谈(epoll)

因此从Android 2.3开始在Native层重新实现了一套阻塞/唤醒方案,Java层弃用Object#wait()/notify(),改为通过jni调用Native进入阻塞态。epoll主要是用来消息处理的,我们看下消息的获得方法 Message msg = me.mQueue.next();1)调用epoll_create()建立一个epoll对象(在epoll文件系统中为这个句柄对象分配资源)创建之后就该使用了,看下流程,我们肯定调用Looper.loop(),来等待方法。

2024-07-18 18:01:19 330

原创 手写一个简单的handler

之后加入我们要发送和接收数据,当然如果我们只发送一个数据,我们就可直接使用handler的方法,当我们有大量数据时呢,如果都使用send,势必会导致线程阻塞,所以我们就想着添加一个队列,我们先把要发送的数据添加进去,之后他们想要处理的数据在慢慢处理,于是我们就写了。他的key是当前线程, values我们可以存放一个looper,这样我们就可以得到这个唯一的looper了。这里就需要思考一个问题了,looper可以有多个吗,我们看个方法就明白了。这两个是主要方法,一个发,一个收。最后我们看下最终的调用。

2024-07-15 14:59:46 720

原创 Android14 在quickSettings中添加任意图标

之前的android版本中我们通过QSFactoryImpl实现,这里我们也看下这个类,在android14中通过依赖注入的方式实现的。我们看下每个的注解,他都添加了 @IntoMap.之后还添加了key来找到对应的值,要添加图标,首先我们需要给我们的图标添加在配置文件config.xml中。我们看他的构造方法通过依赖注入来得到map,map的数据是如何得到的呢。所以我们只需要实现我们的功能,并通过这个方法来将我们的方法添加进去。要是导入了gms里面有个重写,注意要在那里添加路径一般在。

2024-07-13 10:02:27 183

原创 SystemUI的StatusBar(一)

这个文章我们首先说一下锁屏状态下的状态栏。在锁屏页面的状态栏控制就主要有这个方法。

2024-07-10 14:46:31 83

原创 SystemUI的volume

之后我们就先处理上层的吧,毕竟我是上层开发,发送了intent,我们就需要看哪里处理了这个intent ,这里只需要grep下就可以轻松找到VolumeDialogControllerImpl在这个类有添加这个intent的动作。这个方法最后会调用adjustStreamVolume,到这个方法后会执行两个操作,一个向上通知来让ui做出响应,一个向下来让系统调节音量。这个方法是应用音频的。分析完上层了,我们看下底层是如何实现的,上文提到他会通过发送消息来处理,我们看下消息是如何处理的。

2024-07-09 19:12:20 542

原创 连续点击左上角返回桌面

1.首先我们想到在继承的activity上进行修改,在这里改了后如果还有状态栏就无法点击状态栏来返回桌面。2.之后我们在viewRootImpl上进行了修改,这样所有的都会生效,包括状态栏。1.首先我们通过记录时间来完成这个功能。在这里我们有两种方式来实现这种功能。

2024-07-07 00:17:06 97

原创 StartActivity的流程

这里的 mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState)zhihoudaioy。将intent赋值给mRequest,最后我们得到了ActivityStarter,还记得上面得到这个后通过了一系列设置然后执行了execute这个方法,是和生命周期状态相关的。在这之后就resume完成了,之后如果需要pause就需要执行其他方法了。这里的oncreate就是我们经常重写的,这就是oncreate的流程。

2024-07-05 17:54:34 516

原创 android系统的亮度调节

这个图可以看到我们的背光是通过添加服务来实现的,所以走上面的服务mVintfLights.get().setLightState(mHwLight.id, lightState);来设置的,这里的mProperty是。可能着个类是父类,子类有实现,我们就看下我们看下得到的device的类型是啥。这个device的类型是LocalDisplayDevice,我们看下这个类。在这里设置后,这是个线程,会一直run,我们看下run的方法。通过这个来得到device,我们看下device是如何添加的。

2024-07-04 11:46:00 864

原创 app使用Window覆盖系统亮度的流程浅析

在亮度调节时,如果超出范围,会赋值为PowerManager.BRIGHTNESS_INVALID_FLOAT,会不生效,默认会和屏幕亮度相同。这里调用了WIndowsManagerService里的relayoutWIndows这个方法。调用了这个方法 接着就找到了PowerManagerService.java这个类。调用了mCallback,这个类里的Callback是个抽象类。这里执行了performTraversal这个方法执行了。这个方法对传来的值进行了判断,对不符合标准的赋值为。

2024-07-03 14:13:27 589

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除