- 博客(94)
- 收藏
- 关注
原创 Git报错:refusing to merge unrelated histories
ahead 为1,执行 git pull --unshallow。git reset HEAD~13 --hard等等 直到。
2025-01-22 10:23:49
429
原创 Launcher-安装应用时添加应用图标到Workspace的大概流程
的应用 (adb install(unhide),手动安装应用都是INSTALL_REASON_UNKNOWN) 2 HomeSettings 修复无抽屉模式安装拥有多个图标的应用时只添加了一个图标 这个就需要梳理下代码逻辑的大概流程了 首先是SessionCommitReceiver 收到SESSION_COMMITTED 广播。其中app.getModel().onPackageAdded(ai.packageName, mInstallInfo.user);在做了一定的筛选之后,调用如下方法。
2024-07-01 19:48:01
653
1
转载 Gradle学习系列(四):Gradle依赖
作者:renxhui链接:https://juejin.cn/post/6941253391406333983/简介在平时的使用中依赖是一个逃不过的坎,总是因为各种原因导致编译报错,今天我们就好好的理解下依赖,以及常见问题的解决依赖类型Gradle依赖分别为直接依赖,项目依赖,本地jar arr依赖,传递依赖,下面区分下这些依赖的意思直接依赖:在项目中直接导入的依赖,就是直接依赖dependencies { implementation 'androidx.constra.
2021-03-22 17:28:32
3393
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
1841
转载 Gradle学习系列(二):Gradle核心探索
作者:renxhui链接:https://juejin.cn/post/6937208620337610766理解GradleGradle是一个可以构建工具,他可以app的编译打包工作,但是我们学习Gradle不能把它当做一个工具来学,当我们把他当做工具来学的话,我们的目标就是,会写,会配置脚本就就OK了,但是真实的工作中的需求是复杂且多变的,我们除了会用,还要了解为什么这么用,所以我们需要把他当成编程框架来看,这样对于复杂的需求会更加的得心应手回忆一下我们在项目中使用Okhttp的时候是怎.
2021-03-22 15:51:57
903
转载 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
899
翻译 Jetpack架构组件入门
1. 什么是Jetpack1.1 简介Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、 让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。1.2 特性1. 加速开发 组件可以单独采用(不过这些组件是为协同工作而构建的),同时利用Kotlin语言功能帮助开发者提高工 作效率。2. 消除样板代码 Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理),以便开
2021-03-19 11:42:39
283
原创 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
1333
原创 Android源码学习 -- launcher 3 拖动大略流程之终章
前面的不用看了,就看下面几张图就可以知道大概的流程了引用图片落下时的动画在DragLayout 的animateView方法中: 箭头方向要反着看根据 onDriverDragEnd()方法追溯 :onDriverDragEnd() 等方法 与 Workspace的onDrop()方法之间的流程:上面都是拖拽的流程,如果仅仅是长按不动呢 ?...
2019-11-18 16:29:48
541
转载 Android源码学习 --SystemUI 4 StatusBar与StatusIcon
上文说到:StatusBar , CollapsedStatusBarFragment(status_bar),现在说到 StatusIcon块,主要负责的是系统状态的显示,比如蓝牙、闹铃、定位、省流量开关等。这些Icon,都是系统预定好了是哪些。并在一个配置文件定义了slot,或者说是标签。如果你想加一个新类型图标,首先要修改的是这个文件中的config_statusBarIcons数组。...
2019-11-04 17:35:05
545
原创 Android源码学习 --SystemUI 3 SystemBars 与 StatusBar
根据上上一篇文章,我这里知道,SystemServer会通过 SystemUIService,SystemUIApplication类来 通过反射的方式将继承了SystemUI的各个子服务类实例化 , 其中我们可以看到: <item>com.android.systemui.SystemBars</item>这就是我们今天的主角了。SystemBars 里面的代码并...
2019-11-04 17:03:35
653
转载 Android源码学习 --SystemUI 2 SystemUI的介绍(转)
转01 什么是SystemUI?作为Android系统核心应用,SystemUI负责反馈系统及应用状态并与用户保持大量的交互。耳熟能详的三栏:StatusBar(状态栏)、NavigationBar(导航栏)与Notification Panel(通知栏),以及Recents(近期任务界面),使用起来方便又快捷。另外Keyguard(锁屏界面)也是属于SystemUI的一部分。并且在Andr...
2019-11-04 11:30:25
393
原创 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
622
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
615
原创 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
555
原创 Python之 ThreadLocal
在多线程环境下,每个线程都有⾃⼰的数据。⼀个线程使⽤⾃⼰的局部变量 ⽐使⽤全局变量好,因为局部变量只有线程⾃⼰能看⻅,不会影响其他线 程,⽽全局变量的修改必须加锁 ⼀个ThreadLocal变量虽然是全局变量,但每个线程都只能读写⾃⼰线程的独 ⽴副本,互不⼲扰。ThreadLocal解决了参数在⼀个线程中各个函数之间互相 传递的问题 import threading...
2018-11-22 15:23:52
818
原创 python 多线程-⾮共享数据 死锁以及 ⽣产者与消费者模式
在多线程开发中,全局变量是多个线程都共享的数据,⽽局部变量等是 各⾃线程的,是⾮共享的 1. 死锁在线程间共享多个资源的时候,如果两个线程分别占有⼀部分资源并且同时 等待对⽅的资源,就会造成死锁。尽管死锁很少发⽣,但⼀旦发⽣就会造成应⽤的停⽌响应。下⾯看⼀个死锁 的例⼦Thread1 对A 上了锁 ,2 中对B上了锁,然后 互相等待对方释放锁,然后上锁 *...
2018-11-22 15:22:06
327
原创 Python 线程安全问题
在⼀个进程内的所有线程共享全局变量,能够在不使⽤其他⽅式的前提下完成多线程之间的数据共享(这点要⽐多进程要好) 缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量 的混乱(即线程⾮安全)同步: 假设两个线程t1和t2都要对num=0进⾏增1运算,t1和t2都各对num修改10 次,num的最终的结果应该为20。但是由于是多线程访问,有可能出现下⾯情况:...
2018-11-22 15:19:01
1211
1
原创 Python 同步 上锁解锁过程
同步就是协同步调,按预定的先后次序进⾏运⾏#创建锁 mutex = threading.Lock()#锁定 mutex.acquire([blocking]) #释放mutex.release()其中,锁定⽅法acquire可以有⼀个blocking参数。如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为⽌ (如果没有指定,那么默认为Tru...
2018-11-22 15:17:48
1496
原创 python 之 多线程
类似于进程, 主进程都是晚于子进程结束,目的就是为了回收子进程占用的内存.....如果子进程结束了,主进程在没有为其回收的这一段时间,子线程被称为僵尸进程, 如果主进程结束了,子进程却没有回收,子进程被称为孤儿进程. 该进程结束时由一号进程进行收拢 主进程的id 一般都比子进程的 ID 小 length = len(threading.enumerate()) prin...
2018-11-22 15:16:01
183
原创 Python 进程间通信
进程间通信 --------->> 队列,命名管道,无名管道 内存映射 *********************************************************可以使⽤multiprocessing模块的Queue实现多进程之间的数据传递,Queue 本身是⼀个消息列队程序 初始化Queue()对象时(例如:q=Queue()),若括号中...
2018-11-22 15:14:04
359
1
原创 python之进程池
初始化Pool时,可以指定⼀个最⼤进程数,当有新的请求提交到Pool中时, 如果池还没有满,那么就会创建⼀个新的进程⽤来执⾏该请求;但如果池中 的进程数已经达到指定的最⼤值,那么该请求就会等待,直到池中有进程结 束,才会创建新的进程来执行from multiprocessing import Poolimport osimport randomimport time...
2018-08-16 12:01:37
770
原创 python元类 图要改 上
python一切都是对象,linux 一切都是文件python中类也是一种对象,只要使用class ,python解释器就会在执行时创建一个对象直接在类里面写print("sss"); 在调用这个py文件的时候,自动就会打印甚至可以直接print(类名) 因为类也是对象,可以在运行时动态的创建他们, 就像其他任何的对象一样 type(类名, 由父类名称组成的元...
2018-08-16 11:42:23
170
原创 python 元类之 meta_class属性 图要改
你可以在定义一个类的时候为其添加__metaclass__属性(python2--->__metaclass__ python3--->metaclass)class Foo(Bar):pass Python做了如下的操作: 1. Foo中有__metaclass__这个属性吗?如果是,Python会通过__metaclass__创建一个名字为Foo的类...
2018-08-16 11:42:10
335
原创 Python之进程: multiprocessing 跨平台版本的fork
由于 Windows没有fork调⽤ Python是跨平台的,⾃然也应该提供⼀个跨平台的多进程⽀持。 multiprocessing模块就是跨平台版本的多进程模块。⽗进程、⼦进程执⾏顺序没有规律,完全取决于操作系统的调度算法 multiprocessing模块提供了⼀个Process类来代表⼀个进程对象,下⾯的例⼦ 演示了启动⼀个⼦进程并等待其结束:#coding=utf-8 f...
2018-08-08 15:22:44
798
原创 进程的创建-Process⼦类 与 进程池
Process子类创建进程 创建新的进程还能够使⽤类的⽅式,可以⾃定义⼀个类,继承Process类,每 次实例化这个类的时候,就等同于实例化⼀个进程对象from multiprocessing import Processimport timeclass MyNewProcess(Process): def run(self): while True:...
2018-08-08 15:21:41
318
原创 Python之进程与任务
编写完毕的代码,在没有运⾏的时候,称之为程序正在运⾏着的代码,就成为进程进程,除了包含代码以外,还有需要运⾏的环境等,所以和程序是有区别的Python的os模块封装了常⻅的系统调⽤,其中就包括fork,可以在Python程 序中轻松创建⼦进程import os# 注意,fork函数,只在Unix/Linux/Mac上运⾏,windows不可以 pid = os.fork...
2018-08-08 15:21:32
156
转载 Python 切片与迭代
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] >>> L[0:3]['Michael', 'Sarah', 'Tracy']L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略:>>> L[:3]['M...
2018-08-08 15:21:22
168
转载 python 列表生成式 人生苦短我用Python
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):>>> list(range(1, 11))[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]但如果要...
2018-08-08 15:21:08
301
原创 python 之 functools 偏函数 和 集合 set
(本来都是随手放在QQ收藏当笔记,太多了卡了起来,就写到博客,随意了点,见谅) wraps函数使⽤装饰器时,有⼀些细节需要被注意。例如,被装饰后的函数其实已经是 另外⼀个函数了(函数名等函数属性会发⽣改变)。添加后由于函数名和函数的doc发⽣了改变,对测试结果有⼀些影响 所以,Python的functools包中提供了⼀个叫wraps的装饰器来消除这样的副 作⽤。...
2018-08-08 15:20:44
200
原创 Python常用的内建函数
Build-in Function,启动python解释器,输⼊ dir(__builtins__) , 可以看到 很多python解释器启动后默认加载的属性和函数,这些函数称之为内建函 数, 这些函数因为在编程时使⽤较多,cpython解释器⽤c语⾔实现了这些函 数,启动解释器 时默认加载。这些函数数量众多,不宜记忆,开发时不是都⽤到的,待⽤到时再 help(function), 查看如何使...
2018-08-08 15:20:25
419
原创 Python 生成器 重点中的重点 生成器:generator
列表a =[x * 2 for x in range(10)] 0到9,都会乘以2把10 改成 10000000就会报错,内存不够,就会被杀死在Python中,这种一边循环一边计算的机制,称为生成器:generatorgenerator保存的是算法把中括号换成小括号 变成生成器 就不会被杀死 , 生成器是你用的时候才会分配空间 , 每次只生成一个,到了最后一次,如果还要调用...
2018-08-08 13:26:43
284
原创 Python 类来作为装饰器
用类来当做装饰器 , 当Python解释器执行到这里的时候, 就会创建这个类的一个对象,来进行装饰. 相当于创建了一个Test对象,并将test这个函数的引用传了过去.Test对象--->test = Test (test)<-----函数的引用对象加上括号,就会调用对象的__call__函数私有属性__func...
2018-08-08 13:26:13
478
原创 Python动态添加方法和属性
Python是动态语言,可以在运行时改变结构的语言:例如新的函数,对象静态语言:运行之前必须先编译,编译不过就运行不了,运行时不能修改代码给对象添加属性 : 15行会报错,因为类并没有添加属性 给类添加属性: 第17行的操作,不会报错 class Person(object): def __init__(self, newName, newAge): ...
2018-08-07 16:36:14
3930
原创 Python 作用域 与 内建 以及 内建之__getattribute__ 属性访问拦截器
Python解释器在工作的时候会默认导入常见的功能input等称之为内建 内建之__getattribute__ 属性访问拦截器: 所有访问属性的时候一定要先访问这个方法,这个方法返回的值就决定着这个属性得到的数据 print("====1>%s"%obj); 不管是属性名,函数名或者类名,仅仅是变量名, 指向了一片内存而已 test.s...
2018-08-07 16:29:02
1384
原创 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
159
原创 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
241
原创 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
579
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人