- 博客(20)
- 资源 (4)
- 收藏
- 关注
原创 am start -W 统计启动时间点简介
通过am start -W package/componentName可以开启一个Activity例如am start -W com.tcl.testdemo1/.MainActivityStarting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tcl.te...
2023-06-19 00:56:07
451
原创 Android进程生命周期与ADJ
一、 进程生命周期Android系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。 为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入“重要性层次结构”中。 必要时,系统会首先消除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。进程的重要性,划分5级:前台进程(Foregrou...
2022-05-15 15:25:24
227
原创 StartingWindow 启动添加显示
一、简介应用冷启动时候,Activity组件在它的窗口显示出来之前,可以显示一个启动窗口。等应用加载好第一帧之后, 启动窗口消失,显示应用主界面。这个启动窗口可以看作是Activity组件的预览窗口,是由WindowManagerService服务统一管理的,WindowManagerService服务负责启动和结束。demo_gaitubao_364x619_gaitubao_338...
2021-12-29 23:13:18
837
原创 SurfaceFlinger合成一
一、Producer生产完GraphicBuffer,会通知SurfaceFlinger进行合成逻辑。BuffeQueueProducer 中queueBuffer在完成GraphicBuffer相关操作后,会通知到SurfaceFlinger去执行合成逻辑。下来看下具体过程继承关系:sf12.png时序图:sf11.png1、先来看第一步,为什么是执行ProxyC...
2021-05-28 16:01:00
198
原创 BufferQueue学习
上一篇说完App申请完vsync后要进行绘制,本来要说一下绘制的过程,但是感觉进度有点慢,主要研究sf,所以转换下学习思路。一、BufferQueue基本概念:BufferQueue的核心逻辑是生产者消费者逻辑又是GraphicBuffer管理者,在BufferQueue这个生产者消费者框架中, BufferQueuecore可以理解为数据缓冲区的管理者,代码逻辑在BufferQueue.cp...
2021-05-20 16:38:08
717
原创 Vsync与app、surfaceFlinger关系(2)
App 的Vsync 信号已经进行了注册,那什么时候和怎么返回这个信号到 Choreographer.java的onVsync呢,DispSync对象在创建的时候会启动一个DispSyncThread线程,该线程用于模拟Vsync信号,主要是在DispSync.cpp文件中。20.png堆栈信息如下:2021-03-23 14:21:53.423 968-1128/? D/zx1:...
2021-03-23 20:37:08
166
原创 Vsync与app、surfaceFlinger关系(1)
app要进行更新,必须先要请求一个vsync,等到下个vsync信号来的时候进行界面的更新。一、首先先看一下app请求vsync。我们熟知的TextView.setText 或者ImageView.setImageBitmap,最后都要执行invalidate申请重绘,最后会通过ViewParent递归到ViewRootImpl的invalidate。Choreographer.postCal...
2021-03-22 11:01:30
291
原创 SurfaceFlinger初始化
接着上一节,main_surfaceflinger.cpp main方法中,主要看下三点createSurfaceFlinger(),init(),run()。一、SurfaceFlinger的继承关系frameworks/native/services/surfaceflinger/SurfaceFlinger.h class SurfaceFlinger:public BnSur...
2021-03-08 17:29:14
207
原创 SurfaceFlinger启动流程
一、从init.rc文件开始1、SurfaceFlinger 进程是由 init 进程创建的,运行在独立的 SurfaceFlinger 进程中。init 进程读取 init.rc 文件启动 SurfaceFlinger。路径: /system/core/rootdir/init.rcInit.rc 文件在加载的时候会加载所有的core服务on boot......class_s...
2021-03-02 16:11:00
402
原创 截图框架代码原理 android 11
截图SurfaceControl.screenshot框架代码流程一、应用端接口调用 Bitmap screenshot = SurfaceControl.screenshot(new Rect(),width,height,rotation);通过SurfaceControl.screenshot来获取一个bitmap对象,原理就是创造一个graphicBuffer ,屏幕上面各个lay...
2021-02-18 12:20:07
535
转载 Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
结果编译时出现:No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing instance of type E(e.g. x.new A() where x is an instance of E). E指代那个内部类。根据提示,没有可访问的内部类E的实例,必须分配一个...
2018-03-14 17:01:01
531
原创 java 单链表 添加 插入 删除
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-11-30 17:20:40
3384
原创 java单链表的添加、插入、删除
package nodelist;public class LinkListTest {public Node head =new Node();// 定义一个头节点public LinkListTest() {}/*** 添加一个节点* * @param data*/public void addNode(int data) {
2017-11-30 17:19:09
8709
3
原创 二叉树的遍历
二叉树的前序,中序,后序遍历package bintreetraverse;import java.util.LinkedList;import java.util.List;public class BinTreeTraversal {private int[] array = {1,2,3,4};private static List nodeL
2017-11-30 17:10:03
177
原创 单例设计模式
梳理梳理一下自己的IT知识,开始写写博客,无论别人有没有写过,//懒汉式public class SinglePattern {//声明一个静态的私有对象private static SinglePatternsinglePattern = null;//私有的构造方法,防止外部类new对象private SinglePattern(){System.out.p
2017-11-15 16:12:10
143
原创 json缺少其他包
要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:1、commons-lang.jar2、commons-beanutils.jar3、commons-collections.jar4、commons-logging.jar 5、ezmorph.jar6、json-lib-2.2.2-jdk15.jar
2016-12-07 19:15:51
442
原创 shape画虚线
虚线本来用shape很好画,但是有时候画的时候虚线就是不显示,注意一下几点就行。<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="line"> 破折线之间的空隙的宽度为dashGap,当dashGap=0dp时,为实线 -->android:wid
2016-11-28 19:07:21
437
原创 mac myEclipse 更改jre版本
选择偏好设置---->Java---->installed JREs,然后右边出来的框里面选择add---->Standard VM,然后填充为如下信息。主要是jreHome,选择到Home这个目录。点击完成后,选择1.6就可以。然后修改某个项目的引用jre。右键某个项目--->Properties--->就ok。
2016-01-22 18:57:24
1050
转载 Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
当你使用的Gradle版本是2.4以上,Android插件版本是1.3.0以上的时候就会出现这个问题,这时候你只需将android-maven-gradle-plugin插件版本改为classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.3’即可
2015-12-21 14:32:10
493
Java英翻汉软件
2012-04-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人