自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [Unix] Unix C 中access(),snprintf(),open(),write()函数的使用

1.access()函数access()函数根据参数中给定的模式(位的形式)来检查调用进程对文件的权限。头文件:<unistd.h>函数原型:int access(const char* path, int mode);参数:const char* __path:文件路径;int __mode:模式,有四种:R_OK:可读权限;W_OK:可写权限;X_OK:可...

2019-04-06 16:29:29 731

原创 [Linux] Ubuntu配置安装总结

每次重装一个新的Ubuntu后,都需要配置安装多个应用,这里对一些配置进行下总结。以下安装都是在Ubuntu 16.04上进行的。1.Ubuntu安装Google拼音输入法之前一直使用搜狗拼音,但老是崩,越用越气人,还是Google拼音nice一点。1.执行sudo apt-get install fcitx-googlepinyin安装Google拼音;2.执行im-config...

2019-03-31 19:59:30 1245

原创 [C++] 为什么const char**形参不能接收char**类型的实参?

我们知道,const存在的意义之一,就是在对形参进行限定,从而达到防止修改实参的作用。使用const形参的理由有如下三条:

2019-03-22 00:45:06 2078

原创 [设计模式] 适配器模式

1.概述在编程中,每个程序员都可能会遇到这样的问题:方法a()需要A类型的参数,然而我想让B类型的对象作为方法a()的参数进行传递并调用B中定义的方法,A,B两个类型完全不兼容,如何实现这个需求呢?这时就需要适配器出场了。2.定义适配器模式,是指将一个接口类型转化为另一个接口类型,从而可以让原本不兼容的类可以合作无间。3.使用场景当方法参数和现有实参类型不匹配时,需要创建适配器进行接口类...

2019-03-14 23:00:21 350

原创 Android 9.0 JobScheduler(四) Job约束条件的控制

上一篇文章:JobScheduler源码分析(三) Job从创建到执行在前两篇文章中,对JobSchedulerService的启动和Job的调度过程大致做了个梳理,通过前几篇的分析我们知道,要使得客户端Job被JSS调度执行,必须满足该Job在创建时所设置的约束,而这些约束何时满足,这将由StateController进行控制,本篇中将对所有StateController类的控制流程进行分析。...

2019-01-30 17:04:52 3721 1

原创 Android 9.0 JobScheduler(三) 从Job的创建到执行

上一篇文章:JobScheduler(二)——JobScheduler框架介绍及JSS的启动现在来看看Job的添加流程,当应用程序通过JobScheduler.schedule(jobinfo)添加一个Job,到它最终完成调度,这个过程是怎样的呢?现在就来看看这个过程。首先来看其时序图:受限于图片大小,以上时序图中对一些流程进行了省略,只画出了重要的步骤,不过所有的步骤,都会在下面的内容分...

2019-01-24 19:30:08 5026 1

原创 Android 9.0 JobScheduler(二) JobScheduler框架结构简述及JobSchedulerService的启动

上一篇文章:JobScheduler(一)——JobScheduler的使用1.JobScheduler框架简述在上一篇文章中,对怎样使用JobScheduler做了一个简单的总结,当客户端应用通过JobScheduler.schedule(JobInfo)方法将创建的Job发送给JobScheduler后,Framework层将完全负责它的启动、执行、完成等生命周期调度。从这篇文章开始,将对...

2019-01-24 19:16:27 4016

原创 Android 9.0 JobScheduler(一) JobScheduler的使用

1.JobScheduler简介JobScheduler是一个系统提供的API,旨于在应用进程、而非系统进程内执行各种作业调度,其原理是启动通过bindservice的方式启动对应应用进程的service,并在Service中进行作业。在执行一个Job时,将会使得系统持有一个WakeLock锁,以防止系统休眠进入Suspend。在创建一个作业时,会设置多个约束条件,比如可以指定特定的网络、是否...

2019-01-14 15:56:36 8368

原创 Android 9.0 自动背光机制分析

在android 9.0中,相比android 8.1而言,背光部分逻辑有较大的调整,这里就对android P背光机制进行完整的分析。1.手动调节亮度1.1.在SystemUI、Settings中手动调节在界面(SystemUI)和Settings中拖动进度条调节亮度时,调节入口在BrightnessController中:@Overridepublic void onChanged(...

2019-01-04 20:19:45 11438 6

原创 [C++] IO总结

C++中的IO库提供了用于输入输出的各种流,除此之外还提供了管理流和缓冲区等功能。IO库结构如下图所示:相同颜色的类位于同一个头文件中ios_base:表示流的基本特征;ios:继承于ios_base,提供了一个指向streambuf的指针;streambuf:为缓冲区提供了内存,并提供了用于操作缓冲区的方法;istream:继承于ios类,提供了输入方法;ostream:继承...

2018-12-31 23:28:58 902

原创 [C++] 异常

1.抛出异常抛出一个异常,使用throw关键字,如:double divide(int i, int j) { if (j == 0) { throw &amp;quot;除数不能为0!&amp;quot;; } return i / j;}当执行到一个throw时,其后面的语句将不再执行。2.捕获异常如果程序中有异常抛出,则需要对异常进行捕获,通过try...catch语句,如:#include &amp;amp;lt;...

2018-12-26 17:26:38 290

原创 [C++]智能指针unique_ptr,shared_ptr,weak_ptr

C++中对于动态内存的使用非常严格,一次申请必须对应一次释放,否则将造成内存泄漏。这也要求程序员格外小心,比如如下示例:void getStr() { std::string * pstr = new std::string();//pstr为局部变量 *pstr = "Hello world"; .... return;}当该方法执行完毕后,局部变量pst...

2018-12-25 18:29:24 1392

原创 [C++] 类型转换符static_cast、const_cast、dynamic_cast、reinterpret_cast

C++中为了避免松散的、无意义的类型转换,添加了四个类型转换操作符,以更严格地限制类型转换:static_cast,const_cast,reinterpret_cast,dynamic_cast,下面逐一看看他们的使用。static_cast用隐式转换、或者用户定义转换的组合在类型间的转换,可以使用static_cast,该运算符语法格式如下:static_cast&amp;lt;type-nam...

2018-12-23 12:12:23 500

原创 [C++] 友元函数和友元类

c++中对类的访问通过访问修饰符进行控制,类对象不能访问private和protected(子类中可以)修饰的变量和函数。有时候这种限制过于严格,因此,C++提供了另一种形式的访问权限——友元。1.友元函数通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。可以将友元理解为“类的好朋友”。简单来说,一个类的友元可以访问其私有属性和方法。1.2.创建友元函数Step1.创建...

2018-12-07 22:48:48 371

原创 [C++] 继承和动态内存管理

在继承中,需要特别注意对动态内存的处理,当操作基类和派生类对象时,如果管理不当,就会造成如内存的二次释放、派生类内存未释放等问题。申请内存时需要在构造函数(尤其是拷贝构造函数)、赋值运算符中使用new来申请,在释放内存时则需要在析构函数中使用delete释放。下面就来看看继承中和如何合理地通过拷贝构造、赋值运算符、析构函数来管理动态内存。1.基类中未使用动态内存分配,派生类中未使用动态内存分配...

2018-11-30 16:10:58 280

原创 [C++] 继承、虚函数、纯虚函数、虚基类

1.继承1.1.继承语法格式要实现继承,遵循如下语法格式:class SubClass : [public/protected/private] SuperClass{ //... };其中SubClass称为派生类或子类,SuperClass称为基类或父类。冒号之后的访问修饰符的作用如下:1.public表示公有继承,基类的公有成员将成为派生类的共有成员,基类的私有部分...

2018-11-29 07:28:00 1860

原创 [C++] 拷贝构造函数和浅拷贝问题

1.拷贝构造函数当使用一个对象来初始化另一个同类对象时,编译器将自动生成一个构造函数,这个构造函数称为拷贝构造函数,其格式如下:CustomClass(const CustomClass &amp;amp;amp;amp; obj);在之前说过,创建类时,如果没有提供构造函数,那么编译器将会自动提供一个默认的构造函数。拷贝构造函数也是一样,如果没有提供拷贝构造函数,那么编译器将会提供一个默认的拷贝构造函数。1...

2018-11-26 23:29:57 521

原创 [C++] 运算符重载

1.为何需要重载运算符自定义的类,不支持常用的操作符号,如果需要使用一些操作符,则该类必须对相应的操作符进行重载。如自定义类Person:#include &amp;lt;string&amp;gt;class Person{ private: int m_age; std::string m_name; public: Person(in...

2018-11-23 18:11:27 1099

原创 [C++]类总结

1.类基础1.1.类的声明一般的习惯是,类的声明和定义分别在头文件和源文件中进行,声明一个类时,使用关键字class,语法如下://Person.h#include &amp;amp;amp;lt;string&amp;amp;amp;gt;class Person { private: int age; std::string name; public: s...

2018-11-21 23:41:58 327

原创 [C++]namespace和using关键字

1.什么是名称空间一个用于声明名称的区域。2.作用一个名称空间的名称不会与另一个名称空间中相同名称发射给你冲突,从而可以避免名称冲突。3.创建名称空间使用关键字namespace创建,如:namespace MySpace{ int age; double weight; ...}可以对名称空间进行嵌套:namespace MySpace{ in...

2018-11-21 11:21:51 352

原创 [C++] 函数总结

1.函数的定义定义函数三要素:函数名、参数列表、返回值;1.2.函数原型在函数使用前,必须对它进行声明,这个声明也称为函数原型。如:#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;//add()函数原型int add(const int&amp;amp;amp;amp; i,const int&amp;amp;amp;amp; j);int main(){ using namespace

2018-11-18 10:33:15 283

原创 [C++] const限定符

在定义变量时,如果希望该变量是一个只读的常量,则在变量前加const限定符即可。1.用于基本类型对于基本类型变量,定义只读常量有两种方式:#define预处理器编译指令和const限定符,前者是C中的语法,后者是C++中特有。#define和const的区别#define和#include一样,是一个预处理器编译指令,如:#define SIZE 21该指令告诉预处理器,在程序中查找...

2018-11-13 07:44:59 247

原创 [C++] cctype头文件的使用

cctype是c/c++标准库中提供的用于操作字符的头文件。在cctype中,声明了一系列对于单个字符进行分类和转换的函数,cctype中的函数可以分为两大类:字符分类函数和字符转换函数,使用时通过#include预处理指令将引入该文件即可:#include &amp;lt;cctype&amp;gt;//或#include &amp;lt;ctype.h&amp;gt;//老式风格下面对cctype头文件中定义的函数...

2018-11-08 20:24:39 3205

原创 [C++] cin.get(),cin.getline(),cin.clear()使用技巧

cin是用于输入的istream类的一个对象使用cin进行输入时,程序将输入视为一系列的字符,然后cin对象才负责将字符转换为其他类型。在输入数据时,可使用cin &amp;amp;gt;&amp;amp;gt; ch、cin.get(ch)、ch = cin.get()、cin.getline()等多种方式,看似简单,但其中的细节却非常重要,理解了这些cin的特点,那么cin在一些特殊场景下的用法也就一目了然了。如将cin用作...

2018-11-08 20:22:14 2276

原创 Android 8.1 DisplayPowerController(五) 自动调节亮度(2)——算法

在上一篇文章中,对自动背光的流程做了总结,在本篇中,将对自动背光涉及到的一些算法进行分析总结。1.采集光照强度缓冲区AmbientLightRingBuffer类是一个用于存储采集到的光照强度和对应时间点的数据接口。在自动背光控制器中,实例化了两个AmbientLightRingBuffer对象://包含所有光照样例的AmbientLightRingBuffer对象mAmbientLigh...

2018-11-06 14:57:51 5555 1

原创 Android 8.1 DisplayPowerController(四) 自动调节亮度(1)——流程

和手动调节亮度相比,自动调节亮度则稍微复杂些。其中涉及到多个算法。这里先笼统地介绍其流程,对涉及到的算法在下一篇文章中进行学习。从前面的分析得到,不管是哪种背光调节方式,其最终都会在DisplayPowerController的updatePowerState()方法中进行决策,得到最终的背光值,自动背光的亮度也不例外:private void updatePowerState() { ...

2018-11-04 16:16:10 6160 5

原创 [Java] Java中的容器

Java中容器可分为两种:Collection:一个独立元素的序列;Map:一组成对的&quot;键值对&quot;对象;这两大类又根据其他条件衍生了多种子类。整个容器类结构图如下:1.CollectionCollection是单列集合的顶层接口,Collection中又根据是否有序、能否重复存储元素分为两类:1.List:有序列表,可存储重复元素;2.Set:无须列表,不可存储重复元素;1....

2018-10-31 22:37:11 261

原创 [Java] Java中的内部类

基本概念1.内部类定义:将一个类的定义放在另一个类的内部,称为内部类,外面这个类称为外围类。2.内部类持有外部类的引用,因此,在内部类中可以访问外围对象的所有成员,而不需要特殊条件。这里需要注意,并非是内部类对象可以访问外围类对象的成员。.this 和.new 的使用3.在外围类中,可以直接通过new 获取内部类引用;在内部类中,可以通过.this获得外部类的引用://外围类...

2018-10-31 22:33:59 293

原创 [C++] C++基础(三) 指针

2018-10-31 22:30:00 371

原创 [C++] C++基础(二) C++中的数据处理

1.基本数据类型整型整型数据包括以下几类char、short、int、long、long long五种,每种根据有无符号又可以分为两种,因此共有11种(加上wchar_t)。在c++中,每种类型的长度都不定,但提供了一个确保了最小长度的标准,如:short:至少16位长;int:至少和short一样;long:至少32位长;long long:至少64位长;无符号类型和有符号类...

2018-10-31 22:26:56 643

原创 [C++] C++基础(一) C++入门

1.第一个c++程序先用C++来写一个Helloworld的程序:#include &lt;iostream&gt; //预编译指令using namespace std; //编译指令int main() //函数头{ //函数体 cout &lt;&lt; "Hello world" &lt;...

2018-10-31 22:25:51 270

原创 Android 8.1 DisplayPowerController(三) 亮度调节

背光调节,即亮度调节,根据调节方式可以分为手动调节和自动调节。而手动调节有根据调节UI不同,有式有如下几种:1.在设置-&amp;amp;gt;显示中手动调节;2.在SystemUI中手动调节;3.在播放视频时上下滑动界面调节亮度.本篇文章对手动调节亮度流程做一个总结。1.设置-显示、SystemUI中调节亮度Settings和SystemUI中的中亮度调节进度框都是来自于SystemUI中的Br...

2018-10-30 20:54:56 4121

原创 [Android] 性能工具Systrace的使用

Systrace 是用于收集和检测设备在运行过程中的时序信息的一个脚本工具,它结合了来自Android内核的数据,例如CPU调度程序,磁盘活动和应用程序线程,最终会以HTML的形式报告。如何使用systraceStep1.安装systrace在android studio中,Tools -&amp;gt; Android -&amp;gt; SDK Manager -&amp;gt; SDK Tools,点击An...

2018-10-25 19:48:08 3039

原创 [设计模式] 命令模式

前言在日常生活中,我们经常会遇到过这样的场景:去餐厅点餐时,只需要将菜单交给服务员,稍等片刻后就可以吃到想吃的食物了,整个过程中我们跟制作食物的厨师没有一丝的交流。这个场景放在程序中,可以说将客户和厨师进行了完全解耦,而这个场景的实现方式,就是本篇文章的主角——命令模式。定义命令模式可以将动作的请求者和动作的执行者进行解耦。它将命令(或请求)封装成对象,以便使用不同的请求、队列、或者日志来参...

2018-09-29 23:19:07 246

原创 VS code 配置C/C++环境

1.安装C/C++ for Visual Studio Code点击左边扩展栏图标—&amp;gt;搜索C/C++ -&amp;gt; 安装-&amp;gt;Reload:安装完成之后,打开你的包含c++的文件夹,将会生成一个.vscode文件夹,所有的配置将在这个文件夹中进行配置。2.配置IntelliSense扩展程序会根据当前系统环境配置基本信息,因此有可能配置不完整,这时需要通过生成c_cpp_prop...

2018-09-26 18:28:24 9223 1

原创 [设计模式] 装饰者模式

前言一般来说,通过继承就可以基于父类、针对不同的行为而创建不同的子类来扩展功能。但有没有想过,如果每实现一个新行为,就一味地通过继承去搞定,久而久之,最终的代码肯定是不好维护的。同时,通过继承实现的扩展,是在编译时进行确定的。基于这两点,下面引出了装饰者模式。定义装饰者模式可以动态地将责任附加到对象上,相比起继承,装饰者模式更具有弹性。使用场景装饰者模式一般用于动态扩展类的行为,使类更加...

2018-09-19 23:11:12 225

原创 [Linux] SEAndroid基础学习

概述SEAndroid是在Android 4.3版本中开始引入的基于SELinux的系统安全机制。关于SELinux的一些基础已经在SELinux基础中总结了。 在平时工作中,遇到SEAndroid最多的,就是一些权限问题,因此,本文的主要目标,是如何查看SELinux权限拒绝信息、如何修改添加权限。1.SEAndroid相关文件1.system/sepolicy目录该目...

2018-09-17 16:07:27 2177 1

原创 Android 8.1 Battery系列(七) BatteryStatsHelper类和耗电量统计

概述BatteryStatsHelper类用于负责计算各个应用和服务的电量使用情况,利用BatteryStatsService中统计的时长和电源配置文件中的配置值,通过计算得到耗电量信息供Application层使用。在Settings通过refreshStats()方法从BatteryStatsHelper中获取电池的数据。下面就BatteryStatsHelper从实例化到计算系统用电情况...

2018-09-13 20:32:49 5407 1

原创 [设计模式] 观察者模式

定义观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,他的所有的依赖者都会收到通知并自动更新。使用场景观察者模式是典型的发布——订阅模式,经常用于解耦来实现两个对象间的松耦合关系。 在观察者模式中,主题对象(Subject)和观察者对象(Observer)之间是一对多的关系,当主题对象的状态之间有变化,观察者就会被通知,从而完成更新。UML类图其UML类图...

2018-09-11 23:40:49 219

原创 [Android Framework] 8.1 Battery系列(六) 上次充满电计算

Settings中获取”上次充满电”时间的代码如下:packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryUtils.javapublic long calculateLastFullChargeTime(BatteryStatsHelper batteryStatsHelper, long cur...

2018-09-11 17:40:43 1595 2

空空如也

空空如也

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

TA关注的人

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