- 博客(42)
- 收藏
- 关注
原创 如何逆向操作git reset --hard
1. 通过git reflog show或git log -g命令来看到所有的操作日志, 找到需要恢复的commitid2. 通过git branch branch_name commitid新建本地分支,在新建分支里面就有之前被reset掉的提交
2018-02-01 09:53:11
315
原创 彻底干掉状态兰和导航栏
看门见山$ adb remount $ adb shell mv /system/app/SystemUI.odex /system/app/SystemUI.odexold $ adb shell mv /system/app/SystemUI.apk /system/app/SystemUI.apkold $ adb reboot 这样可以永久性的干掉状态栏和导航栏,原理
2017-12-18 12:10:31
724
原创 迷茫
相信绝大多数人都经历过迷茫,那么人为什么都会迷茫,又如何解决这个问题呢?在我看来,迷茫是因为找不到自己的目标,而找不到目标是因为搞不清楚自己想做的事情和能做的事情之间的关系。往往想做的,做不了,能做的又不是自己想要的!那么怎么解决这个矛盾呢?首先,在不考虑实现的情况下,想清楚自己到底想要做怎样的人,做怎样的事?也就是天马行空的想,只考虑主观愿望,不考虑任何客观情况。然后,在不考虑主
2017-12-11 16:16:11
215
原创 做事的步骤
1. 首先要想清楚意义,做任何事之前都要先思考清楚其意义。2. 调研做此事可能要付出的代价,包括,时间,精力,钱财及风险。3. 评估为了这个意义是否值得付出这些代价。4. 若要做,就全力以赴。
2017-10-25 11:42:00
927
原创 android view绘制流程之Measure
Android View的绘制流程分为Measure,Layout,Draw三步,本文讲第一步Measure,简称测量。测量又可以分为测量流程和测量规则。流 程:废话少数,先上图。此图是手绘的测量流程图第一步:从LinearLayout1的onMeasure()方法开始第二步:LinearLayout1遍历其所有子View,并调用子View的measure()方法对
2017-09-29 16:34:46
409
转载 java颜色对照表
我们在编程中常常用到十六进制颜色码。 下面是颜色码对照表-英文名称-十六进制-RGB: 英文代码 形像颜色 HEX格式 RGB格式 LightPink浅粉色#FFB6C1255,182,193Pink粉红#
2017-09-14 19:30:43
1674
原创 android程序保活
在Android系统中要想自己的app不被系统杀死,有以下方法:1. 调用Service.startForegroung()方法,将service设置为前台服务。2. 双进程守护3. 在service.onDestory()方法中重新拉起自己4. 在service的onCommand()方法中返回Service.START_STICKY5. 接收广播,重启自己其中只
2017-08-22 14:28:43
904
原创 Android源码网站
网站地址:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android
2017-06-19 19:42:27
270
原创 Android应用性能优化
App性能优化主要从以下几方面考虑:内存, UI, 电量1. 内存内存是最重要的一个app性能指标.首先简单介绍一下Android系统内存管理机制.内存共享:Android系统起来后首先启动Zygote进程,并在该进程中加载和运行framework的代码和资源,以及一些Java核心类库.app进程是Zygote进程fork出来的,所有app进程与Zygote进程共享运行framework和Jav...
2017-06-02 15:59:01
345
原创 Android事件传递
1. 在Activity的启动过程中,窗口和视图创建完后, 会创建输入通道InPutChannel, 该类执行了Parceladble,专门用来传输用户输入事件给window.2. 用InPutChannel和主线程的Looper作为参数创建事件接收器WindowInputEventReceiver. mInputEventReceiver = new WindowInputEven
2017-06-01 19:30:42
287
原创 activity启动流程简述
Activity是Android四大组件中唯一与用户交互的组件,也是最重要,最复杂的组件, 这里以在新进程中启动Activity为例介绍其启动流程.由于Activity启动过程复杂,代码量大,这里就不贴代码了,直接写调用的函数和作用.发起进程:Activity.startActivity()Instrumentation.execStartActivity()调用标准语句A
2017-05-26 20:17:46
2975
原创 DLNA概述
1. 定义DLNA全称是Digital living network alliance数字生活联盟,是一个由消费电子行业,计算机行业移动设备行业多家公司组成的产业组织.2. DLNA设备1) DMS: 主要提供媒体获取,记录,存储和输出功能.如电脑,数字机顶盒和摄像机.2) DMP: 主要提供播放功能,播放由DMS提供的文件.DMP有媒体查找功能,可以在DMS上查到媒体
2017-05-25 15:29:14
1479
原创 Android线程通信(Handler)
Android应用程序的线程间通信(消息循环)是通过Handler,Looper和MessageQueue三者协同实现的.Handler发送和处理消息,Looper创建消息队列和进入消息循环,MessageQueue描述消息队列.消息循环涉及到Java层和native层,其中,Looper和MessageQueue在Java层和native层都有相应的类,Handler只在Java层有.J
2017-05-25 14:20:01
309
原创 I/O多路复用概述
首先流是什么?文件,socket,pipe等可以进行I/0操作的内核对象都是流.流有两种基本的操作:读和写.为了减少频繁的I/0操作,系统引入了内核缓冲区,即流的操作是在内核缓存区中进行.这里有四种基本操作场景:1. 内核缓冲区为空,但线程A要去读数据,那么内核就会产生一个事件告诉线程A,我这里没数据,你需要等待(阻塞).2. 当内核缓冲区有数据后,内核就产产生一个事件告诉
2017-05-25 11:19:51
416
原创 线程的挂起-睡眠-阻塞
挂起,是指线程暂停运行(释放cpu时间片), 等待通知的到来,收到通知后继续运行.睡眠,是指线程指定暂停多长时间,暂停时间结束后就继续运行.阻塞,是在线程在运行中因缺乏某些系统条件而暂停运行,在条件具备后,系统内核会产生相应事件,线程收到事件后继续运行.这三个本质都是暂时使用cpu, 只是唤醒条件不一样.
2017-05-25 10:21:16
419
原创 bindService过程
相关进程1. client进程2. system_server进程,主要是在AMS和ActiveService里面处理3. service进程首先由client进程发起frameworks/base/core/java/android/app/ContextImpl.javaframeworks/base/core/java/android/content/ContextW
2017-05-24 15:49:59
618
原创 android系统服务
android中的系统服务,如AMS,PMS和WMS与四大应用组件之一的service完全是两回事.系统中的这些服务一直运行在系统进程中,永远不会被杀死,他们不是继承于service,而是继承Stub类或者Binder类,Stub最终也继承于binder.这些服务在系统启动的时候调用servicemanager的addservice方法进行注册.public class PackageMana
2017-05-24 11:47:54
583
原创 binder学习笔记
binder是android系统服务与应用进程之间的桥梁,可以说是整个android系统的基石.binder机制主要分为Java层,native层和驱动层.其中Java层和native层运行在用户空间,驱动层运行在内核空间.Java层主要是应用进程的接口, 通过jni调用到native层,主要实现在native层和驱动层.binder驱动通过内存映射达到一次拷贝就实现进程间通信的目的.从设计模
2017-05-23 17:26:21
1024
原创 产品小唔
人类的需求大抵可分为两类:一类是物质(功能)需求, 另一类是精神(心理)需求.在这个物质过剩的年代, 如果设计出来的产品只满足物质(功能)需求,那么你的产品一定只能卖白菜价,而且竞争激烈. 而如果你的产品可以满足人们的精神需求,简单说就是装B心理, 那么你的产品一定能卖高价,而且竞争相对没那么激烈.典型例子就是苹果手机和android手机.相信比亚迪只要投入足够的资源,也能造出
2017-05-23 10:13:57
242
原创 Java内存模型
首先,什么是内存模型?可以理解为在一定操作协议下,对内存或高速缓存进行读写过程的抽象.简单可以理解为内存中的数据是如何读到cpu里面的,又是如何写回内存的.不够的硬件架构有不同的内存模型,Java为了夸平台也设计了自己的内存模型.Java内存模型:Java线程 工作内存 Java线程 工作内存 Save和Load 主内存Java线程 工作内存
2017-05-22 11:39:01
207
原创 虚拟机之ART
ART概述ART是google开发的运行java程序的运行时环境,他实现了Java虚拟机接口,有垃圾收集机制,还有Java核心类库的调用,可以理解为是Java虚拟机,但并不是标准的Java虚拟机。ART执行的是AOT(提前编译)后的本地机器码,java虚拟机是解释执行class文件,Dalvik虚拟机也是解释执行dex字节码,所以ART比DVM快。ART执行的是oat文件1. oat文
2017-05-19 20:30:00
522
原创 虚拟机之DVM
DVM概述:DVM(Dalvik)也就是Android在5.0之前使用的虚拟机.首先看看他去Java虚拟机JVM之间的关系.Dalvik(DVM)虚拟机不是Java虚拟机(JVM),他是基于寄存器的,而标准Java虚拟机是基于栈,DVM的执行文件是dex,每个dex文件包含多个类,这样可以节约内存空间。JVM的执行文件是class文件,每一个类编译后都是一个class文件。因为JVM基于栈
2017-05-19 20:13:14
1501
原创 虚拟机之JVM
众所周知,Java是一门夸平台语言,之所以能跨平台,就是因为有Java虚拟机JVM.JVM其实有三层意思:1. 抽象虚拟机规范2. 一个具体的商业实现3. 一个运行中的虚拟机实例一个Java程序对应一个JVM实例,他们的生命周期也相同.JVM主要是对字节码进行解释执行,也支持及时编译执行JIT.================================
2017-05-19 16:51:28
258
原创 人生思考
一个社会,在和平一定时间后,阶层就会慢慢固化,强者恒强,弱者恒弱.强者拥有大量资源,利用这些资源可以获取更多资源,而弱者刚好相反.弱者如何才能变强呢?不能简单依靠出卖脑力和体力去挣钱, 必须还要利用一切可以利用的资源去为自己服务.有哪些可以利用的资源呢?如何利用? -----------------------------------------------------...
2017-05-19 14:23:27
328
原创 startService启动过程分析
以在新进程中启动service为例。(在现有进内启动和启动已有service流程相对简单)相关进程:1. client进程2. service进程3. system_service进程,主要是在AMS和ActiveService里面处理4. Zygote进程首先,由client发起frameworks/base/core/java/android/app/C
2017-03-13 19:49:19
1047
原创 Android组件之Service(概述)
Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。service组件作为服务端可以和client端运行在相同进程,也可以运行在不同进程内.service运行在进程的主线程内,在处理业务逻辑时最好使用异步任务或新建线程。如果service和client组件运行在相同进程内:1) client可以通过startService()的方式启动,并在service
2017-03-13 19:37:19
461
原创 浅析Binder驱动
Android系统进程间通信采用了Binder机制,基于openBinder开发. 使用Binder进行进程间通信,只需要一次拷贝便可完成,既提升了效率,又节省了内存空间.Binder机制的实现由三部分组成,分为运行在内核空间的驱动层,运行在用户空间的native层和Java接口层.今天主要介绍驱动层的相关知识.1. 设备初始化设备初始化主要是在系统中创建相关文件,包括Binder
2017-02-24 13:55:35
324
原创 人性思考之开篇
人与人之间,有很多不同,那是个性.人与人之间,有很多相同,那个共性,所有人之间的共性,那便是人性.为人处世,若不懂得人性,那便会处处碰壁.简单举两例;帮他人买东西,是一件不太明智的事情,世上没有完美无缺的事物,你买的也不例外.在他人用你帮买的东西而出问题时,他就会觉得这东西不行,在他人让你帮买东西的时候,就潜意识的认为你买的东西应该是完美的,不应该有问题. 或许他人自己也并未意识到
2017-02-23 10:47:16
377
原创 Android Service Manager
1.介绍Service Manager是Binder进程间通信的核心组件,它是Binder进程间通信的上下午管理者(Context Manager),同时负责系统中的Service组件,并且向Client提供获取Service代理对象的服务.Service Manager运行在独立的进程中,所以Client组件和service组件都需要通过进程间通信机制来与他交互.从这个角度看Service
2017-02-22 21:33:12
1022
原创 <<最重要的事只有一件>>读后感
人生需要规划,需要目标.可使用倒推法制定目标,如:人生目标,十年目标,五年目标,月目标,周目标及当天目标等等.每个小目标都是其大目标的组成部分或前提条件.然后根据目标找到关键问题,再根据关键问题找出最重要的事,最后全力以赴的完成. 完成了最重要的一件事就解决了关键问题,解决了关键问题就实现了目标.想实现目标,有几要和几不要.要找到人生导师.要研究成功人士
2017-02-20 13:09:11
4350
转载 IPC in Application Remote Service
转载: http://www.cnblogs.com/zhangxinyan 1. Application 中的 service我们知道Android中Service有三种类型:Local Service,Local Bounded Service,Remote Service。Local Service:基本是提供给自已应用使用,通过startService(intent
2017-02-17 11:36:27
366
原创 ANR分析
1. ANR的来源系统判定一个APP无响应的几个条件包括:控制Service/Activity/Provider超时、接收广播超时、响应按键/触屏事件超时等。从系统设计角度来分析,以上这些事件都是给APP主线程发消息,可见这些超时实际都是消息没有在APP的主线程及时处理导致的。消息没有处理有三种可能:a. 消息没有发送到主线程的消息队列中b. 主线程还在
2017-02-16 16:54:27
3187
原创 开发细节,持续更新...
1.在activity的onDestory()方法中清空消息队列2.多使用静态内部类,因为静态内部类不持有外部类的引用,不会造成内存泄漏,非静态内部类自动持有外部对象的引用,容易造成内存泄漏.3.在activity中使用Runable的时候,其实是使用的内部类,长时间执行可能导致activity在销毁后无法被gc回收。4.Fragment的Transaction()方法必须在Activ
2017-02-16 16:44:45
312
原创 Handler Looper MessageQueue
Looper MessageQueue Handler这三个东西是线程独有,也就是ThreadLocal的。ThreadLocal本身是一个存储类,其存储的信息是线程独占的。MessageQueue是在Looper中实例化的,Handler在实例化的时候会自动绑定对应的MessageQueue。整个消息循环的流程大概如下:1. 首先在创建线程的时候通过Looper.prepar
2017-02-16 16:33:58
232
翻译 Android SDK之兼容性
1. 设备兼容性:兼容性分为设备兼容性和app兼容性能通过CTS测试的设备都是兼容性社保,这里主要介绍app兼容。如何开发一款兼容市面上所有设备的app?需从如下三方面考虑:1) Device featureAndroid给部分可选feature定义了feature ID。如,FEATURE_SENSOR_COMPASS,FEATURE_APP_WIDGETS.这些
2017-02-16 16:27:40
386
翻译 Android SDK之系统权限
android系统的安全设计出发点是任何应用不能对其他应用,系统和用户数据造成威胁或破坏。应用以互不相同的Linux UID运行在独立的进程里面,若应用需要读写其他应用,系统或者用户的数据就需要申请permissions。系统以一定的形式将应用的permissions申请呈现给用户,用户决定是否授权。1)应用签名每个apk都需要用开发者持有私有密钥的证书签名。签名是为了系统能够
2017-02-16 16:24:54
1121
转载 谢和平院士的毕业致辞
川大的学生要精神富有——在四川大学2015届学士学位授予典礼上的讲话 校长 谢和平 院士2015年6月25日 尊敬的各位老师、亲爱的同学们: 大家上午好!今天,我们欢聚在这里,与圆满完成学业并获得学士学位的8905名同学,分享收获的喜悦,憧憬美好的未来。我首先代表校学位评定委员会全体委员,以及学校党委、行政,向你们表示最热烈的祝贺!向精心培养你们的老师,
2017-02-16 16:23:16
446
原创 ubuntu-E:Encountered a section with no Package: header的解决办法
刚才打开ubuntu,我的版本是14.04.正想使用sudo apt-get update 时,出现了如下错误: Reading package lists... Error! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/
2017-02-16 16:21:37
414
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人