自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QuickLauncher.java 方法初步梳理

A14 原生QuickLauncher.java 方法初步梳理

2024-01-16 17:55:31 395

原创 《福格行为模型》读后感

人为什么会抱怨,或者自我指责?因为没有达到自身期望,又无力改变现状。

2022-01-06 15:39:06 1704

转载 Gradle学习系列(四):Gradle依赖

作者:renxhui链接:https://juejin.cn/post/6941253391406333983/简介在平时的使用中依赖是一个逃不过的坎,总是因为各种原因导致编译报错,今天我们就好好的理解下依赖,以及常见问题的解决依赖类型Gradle依赖分别为直接依赖,项目依赖,本地jar arr依赖,传递依赖,下面区分下这些依赖的意思直接依赖:在项目中直接导入的依赖,就是直接依赖dependencies { implementation 'androidx.constra.

2021-03-22 17:28:32 2881 1

转载 Gradle学习系列(三):Gradle插件

简介Gradle插件在Android中的应用很广泛,很多字节码插桩方案就用到了这方面的知识,Android官方提供了很多可用的插件,比如apply plugin: 'com.android.application':它表示生成一个apk应用的插件;apply plugin: 'com.android.library':它表示生成AAR包。Gradle本身只是提供了基本的核心功能,其他的特性比如编译Java源码的能力,编译Android工程的能力等等就需要通过插件来实现了。 要想应用插件,需要把.

2021-03-22 16:57:40 1634

转载 Gradle学习系列(二):Gradle核心探索

作者:renxhui链接:https://juejin.cn/post/6937208620337610766理解GradleGradle是一个可以构建工具,他可以app的编译打包工作,但是我们学习Gradle不能把它当做一个工具来学,当我们把他当做工具来学的话,我们的目标就是,会写,会配置脚本就就OK了,但是真实的工作中的需求是复杂且多变的,我们除了会用,还要了解为什么这么用,所以我们需要把他当成编程框架来看,这样对于复杂的需求会更加的得心应手回忆一下我们在项目中使用Okhttp的时候是怎.

2021-03-22 15:51:57 855

转载 Gradle学习系列(一):Groovy学习

作者:renxhui链接:https://juejin.cn/post/6932778923491065864配置Groovy环境由于Groovy是运行在java虚拟机上的,所以首先要确定你的电脑有java环境Groovy 语法学习Groovy 的注释和java一样 // 或者/**/ Groovy语句可以不用分号结尾,这个其实是为了代码写起来更加简洁 Groovy中支持动态类型,就是定义变量的时候可以不定义类型,Groovy中定义变量可以使用def关键字,虽然def不是必须的,但是.

2021-03-22 14:09:42 764

翻译 Jetpack架构组件入门

1. 什么是Jetpack1.1 简介Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、 让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。1.2 特性1. 加速开发 组件可以单独采用(不过这些组件是为协同工作而构建的),同时利用Kotlin语言功能帮助开发者提高工 作效率。2. 消除样板代码 Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理),以便开

2021-03-19 11:42:39 232

原创 Android中修改Theme中 ActionBar溢出按钮返回按钮等style样式 总结

1 自定义溢出按钮样式<item name="android:actionOverflowButtonStyle">@style/OverflowStyle</item><style name="OverflowStyle" parent="@android:style/Widget.Holo.ActionButton.Overflow"> <item name="android:src">@drawable/note_menu_holo.

2021-02-26 10:45:13 1141

原创 Android源码学习 -- launcher 3 拖动大略流程之终章

前面的不用看了,就看下面几张图就可以知道大概的流程了引用图片落下时的动画在DragLayout 的animateView方法中: 箭头方向要反着看根据 onDriverDragEnd()方法追溯 :onDriverDragEnd() 等方法 与 Workspace的onDrop()方法之间的流程:上面都是拖拽的流程,如果仅仅是长按不动呢 ?...

2019-11-18 16:29:48 409

转载 Android源码学习 --SystemUI 4 StatusBar与StatusIcon

上文说到:StatusBar , CollapsedStatusBarFragment(status_bar),现在说到 StatusIcon块,主要负责的是系统状态的显示,比如蓝牙、闹铃、定位、省流量开关等。这些Icon,都是系统预定好了是哪些。并在一个配置文件定义了slot,或者说是标签。如果你想加一个新类型图标,首先要修改的是这个文件中的config_statusBarIcons数组。...

2019-11-04 17:35:05 466

原创 Android源码学习 --SystemUI 3 SystemBars 与 StatusBar

根据上上一篇文章,我这里知道,SystemServer会通过 SystemUIService,SystemUIApplication类来 通过反射的方式将继承了SystemUI的各个子服务类实例化 , 其中我们可以看到: <item>com.android.systemui.SystemBars</item>这就是我们今天的主角了。SystemBars 里面的代码并...

2019-11-04 17:03:35 552

转载 Android源码学习 --SystemUI 2 SystemUI的介绍(转)

转01 什么是SystemUI?作为Android系统核心应用,SystemUI负责反馈系统及应用状态并与用户保持大量的交互。耳熟能详的三栏:StatusBar(状态栏)、NavigationBar(导航栏)与Notification Panel(通知栏),以及Recents(近期任务界面),使用起来方便又快捷。另外Keyguard(锁屏界面)也是属于SystemUI的一部分。并且在Andr...

2019-11-04 11:30:25 339

原创 Android源码学习 --SystemUI 1 SystemServer和SystemUI的启动流程

系统服务:SystemServer.java public static void main(String[] args) { new SystemServer().run(); } private void run(){ try{ //省略 // Create the system service manager. ...

2019-11-04 09:38:03 511

Android源码学习----状态栏(1)SignalClusterView

// Intimately tied to the design of res/layout/signal_cluster_view.xmlpublic class SignalClusterView extends LinearLayout implements NetworkControllerImpl.SignalCallback, SecurityController....

2019-11-01 16:06:35 530

原创 Python 异步

from multiprocessing import Poolimport timeimport os def test():    print("---进程池中的进程---pid=%d,ppid=%d--"%(os.getpid(),os.getppid()))    for i in range(3):        print("----%d---"%i) ...

2018-11-22 15:25:09 500

原创 Python之 ThreadLocal

在多线程环境下,每个线程都有⾃⼰的数据。⼀个线程使⽤⾃⼰的局部变量 ⽐使⽤全局变量好,因为局部变量只有线程⾃⼰能看⻅,不会影响其他线 程,⽽全局变量的修改必须加锁  ⼀个ThreadLocal变量虽然是全局变量,但每个线程都只能读写⾃⼰线程的独 ⽴副本,互不⼲扰。ThreadLocal解决了参数在⼀个线程中各个函数之间互相 传递的问题  import threading...

2018-11-22 15:23:52 766

原创 python 多线程-⾮共享数据 死锁以及 ⽣产者与消费者模式

在多线程开发中,全局变量是多个线程都共享的数据,⽽局部变量等是 各⾃线程的,是⾮共享的 1. 死锁在线程间共享多个资源的时候,如果两个线程分别占有⼀部分资源并且同时 等待对⽅的资源,就会造成死锁。尽管死锁很少发⽣,但⼀旦发⽣就会造成应⽤的停⽌响应。下⾯看⼀个死锁 的例⼦Thread1  对A 上了锁 ,2 中对B上了锁,然后 互相等待对方释放锁,然后上锁 *...

2018-11-22 15:22:06 292

原创 Python 线程安全问题

在⼀个进程内的所有线程共享全局变量,能够在不使⽤其他⽅式的前提下完成多线程之间的数据共享(这点要⽐多进程要好) 缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量 的混乱(即线程⾮安全)同步: 假设两个线程t1和t2都要对num=0进⾏增1运算,t1和t2都各对num修改10 次,num的最终的结果应该为20。但是由于是多线程访问,有可能出现下⾯情况:...

2018-11-22 15:19:01 1131 1

原创 Python 同步 上锁解锁过程

同步就是协同步调,按预定的先后次序进⾏运⾏#创建锁 mutex = threading.Lock()#锁定 mutex.acquire([blocking]) #释放mutex.release()其中,锁定⽅法acquire可以有⼀个blocking参数。如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为⽌ (如果没有指定,那么默认为Tru...

2018-11-22 15:17:48 1446

原创 python 之 多线程

类似于进程, 主进程都是晚于子进程结束,目的就是为了回收子进程占用的内存.....如果子进程结束了,主进程在没有为其回收的这一段时间,子线程被称为僵尸进程, 如果主进程结束了,子进程却没有回收,子进程被称为孤儿进程. 该进程结束时由一号进程进行收拢 主进程的id 一般都比子进程的 ID 小 length = len(threading.enumerate()) prin...

2018-11-22 15:16:01 119

原创 Python 进程间通信

进程间通信 ---------&gt;&gt;  队列,命名管道,无名管道 内存映射 *********************************************************可以使⽤multiprocessing模块的Queue实现多进程之间的数据传递,Queue 本身是⼀个消息列队程序 初始化Queue()对象时(例如:q=Queue()),若括号中...

2018-11-22 15:14:04 280 1

原创 python之进程池

初始化Pool时,可以指定⼀个最⼤进程数,当有新的请求提交到Pool中时, 如果池还没有满,那么就会创建⼀个新的进程⽤来执⾏该请求;但如果池中 的进程数已经达到指定的最⼤值,那么该请求就会等待,直到池中有进程结 束,才会创建新的进程来执行from multiprocessing import Poolimport osimport randomimport time...

2018-08-16 12:01:37 729

原创 python元类 图要改 上

python一切都是对象,linux 一切都是文件python中类也是一种对象,只要使用class ,python解释器就会在执行时创建一个对象直接在类里面写print("sss");  在调用这个py文件的时候,自动就会打印甚至可以直接print(类名) 因为类也是对象,可以在运行时动态的创建他们, 就像其他任何的对象一样 type(类名, 由父类名称组成的元...

2018-08-16 11:42:23 137

原创 python 元类之 meta_class属性 图要改

你可以在定义一个类的时候为其添加__metaclass__属性(python2---&gt;__metaclass__    python3---&gt;metaclass)class Foo(Bar):pass Python做了如下的操作:  1. Foo中有__metaclass__这个属性吗?如果是,Python会通过__metaclass__创建一个名字为Foo的类...

2018-08-16 11:42:10 273

原创 Python之进程: multiprocessing 跨平台版本的fork

由于 Windows没有fork调⽤ Python是跨平台的,⾃然也应该提供⼀个跨平台的多进程⽀持。 multiprocessing模块就是跨平台版本的多进程模块。⽗进程、⼦进程执⾏顺序没有规律,完全取决于操作系统的调度算法 multiprocessing模块提供了⼀个Process类来代表⼀个进程对象,下⾯的例⼦ 演示了启动⼀个⼦进程并等待其结束:#coding=utf-8 f...

2018-08-08 15:22:44 721

原创 进程的创建-Process⼦类 与 进程池

 Process子类创建进程  创建新的进程还能够使⽤类的⽅式,可以⾃定义⼀个类,继承Process类,每 次实例化这个类的时候,就等同于实例化⼀个进程对象from multiprocessing import Processimport timeclass MyNewProcess(Process):    def run(self):        while True:...

2018-08-08 15:21:41 249

原创 Python之进程与任务

编写完毕的代码,在没有运⾏的时候,称之为程序正在运⾏着的代码,就成为进程进程,除了包含代码以外,还有需要运⾏的环境等,所以和程序是有区别的Python的os模块封装了常⻅的系统调⽤,其中就包括fork,可以在Python程 序中轻松创建⼦进程import os# 注意,fork函数,只在Unix/Linux/Mac上运⾏,windows不可以 pid = os.fork...

2018-08-08 15:21:32 125

转载 Python 切片与迭代

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] &gt;&gt;&gt; L[0:3]['Michael', 'Sarah', 'Tracy']L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略:&gt;&gt;&gt; L[:3]['M...

2018-08-08 15:21:22 137

转载 python 列表生成式 人生苦短我用Python

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):&gt;&gt;&gt; list(range(1, 11))[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]但如果要...

2018-08-08 15:21:08 273

原创 python 之 functools 偏函数 和 集合 set

   (本来都是随手放在QQ收藏当笔记,太多了卡了起来,就写到博客,随意了点,见谅) wraps函数使⽤装饰器时,有⼀些细节需要被注意。例如,被装饰后的函数其实已经是 另外⼀个函数了(函数名等函数属性会发⽣改变)。添加后由于函数名和函数的doc发⽣了改变,对测试结果有⼀些影响 所以,Python的functools包中提供了⼀个叫wraps的装饰器来消除这样的副 作⽤。...

2018-08-08 15:20:44 145

原创 Python常用的内建函数

Build-in Function,启动python解释器,输⼊ dir(__builtins__) , 可以看到 很多python解释器启动后默认加载的属性和函数,这些函数称之为内建函 数, 这些函数因为在编程时使⽤较多,cpython解释器⽤c语⾔实现了这些函 数,启动解释器 时默认加载。这些函数数量众多,不宜记忆,开发时不是都⽤到的,待⽤到时再 help(function), 查看如何使...

2018-08-08 15:20:25 370

原创 Python 生成器 重点中的重点 生成器:generator

列表a =[x * 2  for x in range(10)]   0到9,都会乘以2把10 改成  10000000就会报错,内存不够,就会被杀死在Python中,这种一边循环一边计算的机制,称为生成器:generatorgenerator保存的是算法把中括号换成小括号 变成生成器 就不会被杀死 , 生成器是你用的时候才会分配空间 , 每次只生成一个,到了最后一次,如果还要调用...

2018-08-08 13:26:43 243

原创 Python 类来作为装饰器

用类来当做装饰器 , 当Python解释器执行到这里的时候, 就会创建这个类的一个对象,来进行装饰. 相当于创建了一个Test对象,并将test这个函数的引用传了过去.Test对象---&gt;test = Test (test)&lt;-----函数的引用对象加上括号,就会调用对象的__call__函数私有属性__func...

2018-08-08 13:26:13 430

原创 Python动态添加方法和属性

Python是动态语言,可以在运行时改变结构的语言:例如新的函数,对象静态语言:运行之前必须先编译,编译不过就运行不了,运行时不能修改代码给对象添加属性 : 15行会报错,因为类并没有添加属性 给类添加属性:  第17行的操作,不会报错    class Person(object): def __init__(self, newName, newAge): ...

2018-08-07 16:36:14 3839

原创 Python 作用域 与 内建 以及 内建之__getattribute__ 属性访问拦截器

 Python解释器在工作的时候会默认导入常见的功能input等称之为内建 内建之__getattribute__ 属性访问拦截器: 所有访问属性的时候一定要先访问这个方法,这个方法返回的值就决定着这个属性得到的数据 print("====1&gt;%s"%obj); 不管是属性名,函数名或者类名,仅仅是变量名, 指向了一片内存而已 test.s...

2018-08-07 16:29:02 1318

原创 Python 装饰器(2)

例1:无参数的函数from time import ctime, sleepdef timefun(func): def wrappedfunc(): print("%s called at %s"%(func.__name__, ctime())) func() return wrappedfunc@timefundef foo()...

2018-08-07 16:25:37 120

原创 Python 装饰器(1) 重点之重点

语法糖: def w1(func): def inner(): print("---正在验证权限----") if False: func() else: print("没有权限") return inner#f1 = w1(f1)@w1def f1(): pri...

2018-08-07 16:20:30 182

原创 Python 闭包---- >变量指向函数,可以调用函数

变量指向函数,可以调用函数闭包,调用里面的函数,外边函数的值就不用再传了 def line_conf(a, b):    def line(x):        return a*x + b    return lineline1 = line_conf(1, 1)line2 = line_conf(4, 5)print(line1(5))print(...

2018-08-07 16:09:44 530

原创 Python 迭代器------划重点:Iterable ,Iterator 的区别

迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。1. 可迭代对象以直接作用于 for 循环的数据类型有以下几种:一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;一类是 generator ,包括生成器和带 yield...

2018-08-07 16:05:41 261

原创 Python之property

t.num = 200 #相当于调用了 t.setNum(200) print(t.num) #相当于调用了 t.getNum() #注意点:#t.num 到底是调用getNum()还是setNum(),要根据实际的场景来判断,#1. 如果是给t.num赋值 那么一定调用setNum()#2. 如果是获取t.num的值,那么就一定调用getNum()##pr...

2018-08-07 16:03:29 128

空空如也

空空如也

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

TA关注的人

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