自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (7)
  • 收藏
  • 关注

原创 对OOM的理解

什么是OOM?oom(out of memory)是应用在申请分配内存时,系统无法分配足够的内存时出现。OOM出现的原因 内存泄漏(对象生命周期不一致导致,长生命周期的对象持有短生命周期的对象,导致无法释放) 内存溢出(需要分配的内存,超过了系统需要,比如分配了1M内存,到时实际操作却操作了1M以外的内存) 碎片内存太多,连续完整的内存少 大型app确实需要消耗大量内存 文件句柄超出限制 线程数量超出限制 OOM解决方案...

2021-06-27 09:46:17 761 5

原创 SparseArray源码浅析

介绍SparseArray是android特有的轻量级数据结构,类似于hashmap以键值对的方式进行存储,但是key类型为int,key-value分别采用数组进行存储,采用二分法进行查询,具有很高的查询效率(时间复杂度O(logn)),但是插入和删除效率比较低(需要移动数组), 不适合大量数据的情况。图示从上图中可以看出,key-value分别存储在Key数据和Value数组中,它们有者共同的索引。插入,删除,查询操作,遍历key数组通过二分查找法,找到k...

2021-06-24 23:41:37 198 1

原创 Android系统启动流程

介绍 Android系统作为当下最热门的操作系统,理清楚其启动流程还是非常必要,qi

2021-06-12 08:00:05 285 6

原创 JDK1.8 Thread类说明

简介Thread Java线程类,用于线程相关操作,是并发和多线程的基础。本文将对Thread源码和日常使用的函数进行解读。在对线程的使用有基本的了解后,再来阅读它的源码,有助于加深对线程的理解;如有小伙伴对线程的使用不是很清楚的话,请参考《Java开启线程的4种方式》。线程是操作系统中的概念,也是系统调度的基本单元。对于线程的创建,通常通过系统的API来进行创建,Thread的线程创建也是通过系统API来进行创建,Thread只是对系统线程的一个包装。...

2021-06-11 17:37:41 364

原创 Android四种进程通信机制比较

介绍 进程通信本质是进程间数据交换(既数据从这个进程内存拷贝到另外一个进程),由于进程有独立的地址空间,两个进程需要交换数据,需要通过内核进行中转数据,通信的方式不同,通信效率也不一样。本文将介绍4种常用的进程通信的特点,以及优缺点。...

2021-06-05 17:58:12 751 8

原创 JNI基本使用二

介绍 接着上一篇博文本次主要介绍JNI的动态注册,以及在JNI中如何开线程。JNI的基础部分,请详细参考《JNI的基本使用一》

2021-05-29 21:22:42 252 2

原创 JNI的基本使用一

介绍 JNI即Java Native Interface的简称,java本地方法接口,通过JNI Java可以和C相互调用。Java语言也是通过JNI接口来调用系统的功能,只不过JNI的实现部分在JDK中,这样可以增加Java的功能。同样用户程序也可以通过实现JNI接口来调用本地方法。如: 如: windows和linux上Java程序需要调用外设驱动,就需要使用JNI;android上NDK也是通过JNI进行调用。本文主要讲解在windows上java通过jni调用本地方法,测试效果和在a...

2021-05-29 17:45:56 2268

原创 Java开启线程的4种方式

介绍多线程是java中的一个重要的知识点,且在业务中经常使用,还是有必要掌握一下它。本文简要介绍一下线程的4种启动方式, 继承Thread,实现Runnable接口,实现Callable接口,通过线程池来启动线程。以上4种形式的线程启动方式,最终都是通过Thread.start()方法来真正启动线程。继承Thread通过继承java线程类Thread,并覆写run方法来实现线程。如下:package com.stx.demo;/** * 线程使用方式1 * 直接继承Threa.

2021-05-25 12:07:03 4288 2

原创 Android pm命令

介绍pm命令提供了app包的管理,即packagemanager以命令行的方式提供给开发者使用。以下将介绍常用pm命令的基本使用。常用命令查看当前用户的ID(USER_ID)$pm list usersx20l_fhd_portrait:/ $ pm list usersUsers: UserInfo{0:机主:13} running当前用户信息,USER_ID是0,用户名是13查看已经安装的包$pm -lx20l_fhd_portrait:/ ...

2021-05-22 11:39:05 1950 16

原创 用synchronized实现Semaphore

介绍基于Semaphore的功能,主要用来实现并发和限流,本文采用synchronized来实现Semaphore基础功能。关于Semaphore的说明,请参考JDK1.8 信号量(Semaphore)的基本使用代码实现public class MySemaphore { private volatile int count; private volatile int waitCount = 0; /** * 初始化信号量 * @param co

2021-05-16 18:57:52 279 4

原创 JDK1.8 信号量(Semaphore)的基本使用

介绍信号量支持多线程同时并发,但是同时并发线程数是确定的,起到了限流的作用。比如: 临界资源的数量是5个,那么则可以同时支持5个线程进入临界资源,待进入临界资源的线程退出后,其他线程才能进入来,也就是说当前占用临界资源的线程小于5个,其他线程才能进来。以停车场的车位为例: 停车场有5个车位,如果都停满了车,那么其他车就无法进来;反之,其他车可以进入停车场,直接到车位停满。使用初始化信号量public Semaphore(int permits) { sync = new Nonf

2021-05-16 12:30:22 456 3

原创 跨平台语言的底层原理浅析

介绍在IT从业中,我们时不时会听到xxx语言支持跨平台,一套代码在windows, linux, unix, mac上运行,懂一种语言就可以玩转所有平台,开发效率极高。本文主要介绍java的跨平台特性,其他语言的跨平台特性类似。原理当前所有的流行的操作系统windows,linux,unix都是基于c/c++开发而来, 从某种意义上讲c/c++是天生跨平台语言,移植性强(不同操作系统底层api不尽相同, 涉及到底层api调用需要操作系统适配)。而其他语言如java, 它的底层实现也是通过c++实

2021-05-06 09:56:32 809 3

原创 进程线程协程的初步理解

进程进程是操作系统进行资源分配的基本单位,简单理解就是正在运行程序的实例。进程的用户空间是相互独立,系统空间是共享的,它们之间进行通信(即数据交换)需要通过系统空间来完成。线程线程是程序调度的最小单位,也可以理解为程序执行的路径。一个进程可以有多个线程。线程在调度时,启动,停止,暂停和恢复都需要进行内核态的切换,需要额外的系统开销。协程协程它是微线程,可以看作程序的组件,协程跑在线程中,它的状态切换不需要系统开销,它们在线程中是顺序执行的,一个线程可以有多个协程。协程的出

2021-05-05 16:30:32 151 2

原创 JDK1.8 LinkedBlockingQueue类说明

介绍LinkedBlockingQueue是一种基于链表实现的阻塞队列,它实现了BlockingQueue的接口,线程安全。LinkedBlockingQueue初始化时,可以不指定大小,不指定大小默认大小为Integer.MAX_VALUE,属于无界队列。使用时建议初始化一个大小,避免LinkedBlockingQueue元素过大,将系统内存耗光。关于队列的实现原理请参考 队列实现原理和JDK1.8 BlockingQueue接口说明,链表原理参考设计思想在队头出队,在队尾入队,.

2021-04-21 23:40:05 241 2

原创 解决transformNative_libsWithStripDebugSymbolForDebug办法

GitHub上工程地址https://github.com/jpush/jpush-hbuilder-demo.gitandroid studio4.0.1 在编译老项目时,由于NDK采用了android-ndk-r9b,编译出现如下错误FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:transformNativeLibsWithStripDeb..

2021-04-16 09:39:52 424 4

原创 JDK1.8 ArrayBlockingQueue类说明

介绍ArrayBlockingQueue是一种基于数组实现的阻塞队列,它实现了BlockingQueue的接口,线程安全。为了实现队列的入队和出队更高的效率,采用了环形队列的形式,环形队列在入队和出队时的时间复杂度为O(1)。ArrayBlockingQueue初始化时,需要指定队列的大小,属于有界队列。关于队列的实现原理请参考 队列实现原理和JDK1.8 BlockingQueue接口说明功能解读成员属性/** 队列元素存放数组 */ final Object[] items

2021-04-13 22:28:47 172 1

原创 JDK1.8 BlockingQueue接口说明

介绍BlockingQueue阻塞队列接口,定义了实现规范,线程安全。方便生成者和消费者模型使用,使用BlockingQueue时,开发者不需要考虑线程安全问题,将精力集中到业务实现即可。实际使用中,以生产者和消费者模型为例,分为三种情况: 1. 队列为空,生产者存入数据,消费者阻塞;2. 队列满,生产者阻塞,消费者拉取数据;3.队列非空非满,生产者可以存入数据,消费者也可以拉取数据。队列实现原理参考接口介绍入队操作boolean add(E e);添加一个元素到队尾,成功时.

2021-04-12 12:51:53 164

原创 Android6.0 apk安装INSTALL_PARSE_FAILED_NO_CERTIFICATES问题解决

场景: Android Studio4.0编译的apk 可以在Android7.0,8.0上正常安装,但是到了Android6.0安装就会提示签名解析失败。这种情况看apk肯定是有签名的,可能是android版本不一样,签名类型也不同,低版本出现了签名兼容性的问题。 采用Android Studio4.0调试时安装没有问题,猜测调试安装时,Android Studio自动选择了签名类型 出现原因:不同的Android版本,apk采用的签名方式不同,目前出现的签名方式有.

2021-04-07 12:50:43 1210

原创 Android am命令

介绍am命令提供了操作activity,service,broadcast的方法,极大的方便了设备的调试。本文介绍了常用的基本操作。使用说明#amusage: am [subcommand] [options]usage: am start [-D] [-W] [-P <FILE>] [--start-profiler <FILE>] [--sampling INTERVAL] [-R COUNT] [-S] [--opengl-tr

2021-04-05 20:50:51 799

原创 Android service命令

介绍service命令用来查询某一个服务是否启动,以及调用某一个服务中的一个方法。使用说明#serviceUsage: service [-h|-?] service list service check SERVICE service call SERVICE CODE [i32 N | i64 N | f N | d N | s16 STR ] ...Options: i32: Write the 32-bit integer N in

2021-04-05 09:22:33 1056

原创 Android wm命令

介绍wm命令是对设备的分辨率,像素密度,显示区域进行设置的命令。使用说明#wmusage: wm [subcommand] [options] wm size [reset|WxH|WdpxHdp] wm density [reset|DENSITY] wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM] wm scaling [off|auto] wm screen-capture [us...

2021-04-04 22:08:46 973 1

原创 Android input命令介绍

介绍input是android中模拟外设事件的特殊命令, 用于模拟遥控器、键盘、鼠标的各种按键操作,自动化测试常常需要用到该指令。 input可执行文件放在/system/bin目录,本次介绍的input命令行基于Android6.0。使用说明input功能集合#inputUsage: input [<source>] <command> [<arg>...]​The sources are: mouse keybo...

2021-04-04 21:14:48 2625

原创 Android svc命令

介绍用来管理电源控制,无线数据,WIFI,蓝牙的电源开关,注意支持root权限。使用说明svc主要功能集#svcAvailable commands:help Show information about the subcommandspower Control the power managerdata Control mobile data connectivitywifi Control the Wi-Fi managerusb ...

2021-04-04 08:05:42 1589

原创 队列实现原理

介绍队列(Queue)是限定仅在表尾插入,表头删除操作的线性表或者链表。head和rear指针分别指向对头和队尾。实现原理基本模型队列从一端插入元素,另外一端移除元素,实现先进先出。插入操作空队列, 空队列head和rear指针指向相同的位置插入1一个元素,head指针不变,rear指针移动一个位置,时间复杂度为O(1)陆续插入元素,直到队列最大容量,那么队列满了队列长度: rear - head移除操作移除操作,将元素从队列头部弹出,头指针.

2021-04-03 20:44:05 675 3

原创 Android df查看磁盘分区情况

df命令用来显示磁盘统计情况查看整个磁盘统计情况#df查看其中一个分区的容量#df /system查看分区挂载点#cd /dev/block块设备符号目录#cd by-name#ls -l磁盘整理工具#e2fscke2fsck用法#e2fsck -p /dev/block/by-name/system修复system分区...

2021-04-02 23:23:03 1488

原创 JDK1.8 Stack实现原理

简介

2021-03-30 23:40:46 209

原创 JDK1.8 Vector实现原理

介绍Vector是一个可动态扩展的线性表,底层实现是数组。 它的实现原理以及使用方式和ArrayList基本一致,不同点就是Vector是线程安全类,ArrayList非线程安全。实现原理增加元素: public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] =...

2021-03-30 12:43:16 147

原创 TCP协议三次握手和四次挥手机制理解

简介TCP协议(Transmission Control Protocol, 传输控制协议),为应用层提供可靠的、面向连接的、基于流的服务。在OSI七层模型中,属于传输层。如果对OSI七层模型不了解的小伙伴,请参考OSI七层网络参考模型TCP报文格式说明TCP报文字段说明:端口号:用来标识同一台计算机的不同的应用进程。源端口号: 源端口和IP地址的作用是标识报文的返回地址,本机应用程序用来通信的端口。目的端口号: 接收计算机上的应用程序进行通信使用的端口。注意: TCP.

2021-03-28 23:53:52 159

原创 OSI七层网络参考模型

介绍OSI七层网络模型是为了解决软硬件网络通讯协议标准兼容性的问题。70年代,计算机发展之初,计算机各个部件产商都制定了自己的网络协议,这些产商只兼容自己的设备,和其他产商的计算机设备无法兼容;但是现实的需求是需要不同产商的计算机设备协同工作,由于各自产商都有自己的网络协议,就导致了极差的网络兼容性,不同设备基本无法组网协同工作(设想一下,交通规则里面,靠右行驶和靠左行驶同时存在,那么处处都是逆行,处处都是堵车或者发生交通事故,道路通行率就会很差)。为了解决兼容性问题,OSI组织应运而生,制定了网络通信

2021-03-26 07:55:29 362

原创 Android4.4电池电量命令行查看

命令行查看电池电量方法:#cd/sys/class/power_supply/BATTERY#lscapacity 表示当前电量status 电池状态Charging ---> 充电中voltage_now 表示当前电池电压(单位毫伏)uevent 充电的事件

2021-03-24 20:30:33 1239

原创 JDK1.8 LinkedList原理

目录介绍实现原理优缺点类图

2021-03-23 23:33:52 218

原创 JDK1.8 ArrayList原理

介绍: ArrayList是一个可动态扩展的线性表,底层实现是数组。当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。由于基于数组实现,查找复杂度为O(1), 新增和删除复杂度为O(n)。本文主要介绍ArrayList的增删改查的实现原理。实现原理: 增加元素: 数组尾部增加: 操作步骤: 1. 直接在当前数组大小后面插入一个元素 尾部添加在...

2021-03-21 16:09:09 192

原创 Android System目录去除只读属性

Android4.4去除system只读属性#mount -o remount /systemAndroid8.1去除system只读属性#mount -o remount,rw /systemAndroid8.1去除SELinux权限#getenforce (查询权限状态)Enforcing#setenforce 0 (0-表示去除权限; 1-表示设置权限)#getenforcePermissive...

2020-07-09 18:29:12 895

原创 Android命令行查看顶部运行Activity

#dumpsys activity top | grep ACTIVITY

2020-05-08 17:00:59 842

转载 adb device无法识别的问题

请参考下面这个贴子,这个位仁兄整理的不错,测试可以实际解决问题。http://blog.csdn.net/frank_zyp/article/details/78417427

2018-02-07 11:31:03 7132

原创 2016展望

2015年总结。         已经过去的2015,完成的项目不多也不少,公司自己的项目一个,外包项目一个。对于大部分牛人来说,一年才2个项目,真他娘的少,确实有点,效率有待提升。   2016年计划:          1. 读书5本           《Android设计模式》,《Java编程思想4》,《Android 系统源代码情景分析》,《失控》,《看见》 

2015-12-31 20:43:45 381

原创 Android4.4 平板背光设置

对于平板来说,设置背光对于省点来说比较重要。本文从应用层到内核层讲解系统是如何成功的设置背光的。设置背光,本质上是调节LCD的电压,达到对亮度的控制,Framework层的一系列的接口都是kernel层gpio操作的层层封装和相应的管理。     对于app来说亮度的控制如下:        /**  关闭自动调节亮度,改为手动调节亮度*/      public static

2015-11-12 18:29:44 2363

转载 boot.img 解包与打包

http://blog.csdn.net/wh_19910525/article/details/8200372

2015-04-03 00:16:07 911

原创 Android下自定义IP控件

在Android原生控件中,没有IP输入控件,于是自定义一个,如果有bug或者代码上的问题,欢迎大家提出,先谢谢大家。    控件代码如下:import android.content.Context;import android.graphics.drawable.GradientDrawable;import android.text.Editable;import

2015-03-16 00:08:42 1460

转载 Android 采用eclipse编辑UI,非常卡问题解决

打开eclipse,利用自带的编辑器进行编辑XML,发现非常卡,内存耗掉700+M,发现不停在运行错误检查和优化(Android Lint),需要把Android Lint关闭掉。关闭步骤如下:     1. 选择项目右键     2. 选择Properties       去掉勾选Run full error check when exporting app an

2015-03-15 23:58:53 432

win32下自定义Thread实现源码.zip

win32下实现自定义Thread

2021-06-11

JIN基本使用二工程资源

实现了JNI动态注册和在JNI线程中获取JNIEnv

2021-05-29

JNI测试C和Java工程

JNI实践例子,实现了Java和C的互相调用

2021-05-29

adb.zip(android sdk)

版本号:1.0.41

2021-03-28

getopt.h和cpp

提供Linux下的getopt.h和cpp,可以放到windows下的vc直接编译通过

2011-11-26

IPHelper库文件

由于在vc6中没有提供IPHelper库,在编程时,如果要获取MAC地址的话,需要用这类库。

2011-10-11

基于Linux下的超市pos收银机

能够实现超市收银机的全部功能 本系统是基于Linux 平台下的超市收银机,其采用了Oracle数据库对超市商品进行管理,使用了ncurses绘制界面,美观大方,功能方便实用,不过在有些细节方面做的不够,希望有兴趣的爱好者对它在性能上进行改进。

2009-09-30

空空如也

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

TA关注的人

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