- 博客(46)
- 资源 (1)
- 收藏
- 关注
原创 聊一聊Android的Handler(一)
Handler对于Android开发者而言,应该是再熟悉不过的了。每个Handler在创建时,就会绑定于一个特定线程内(创建时所在的线程),同时也绑定于该线程所在的Message Queue。Handler是做什么的?归类下来,其实是两个用处: 1. 管理该线程内未来任务的执行次序。(schedule功能) 2. 不同线程之间的消息通信。(包括UI线...
2019-07-21 17:57:12 359
原创 聊一聊Android的TransactionTooLargeException
是什么?Android OS定义的一种异常类型,binder事务中 发送或接受的序列化对象过大,超过了biner事务缓存区的上限时,该异常就会被抛出。OS通常定义的上限是1M,但这是对整个进程内所有进行的binder事务共用的。根据笔者实践,一次通讯中超过512kb时,就会触发该异常。ps. Google的 Android guide里写的是1M左右,其实是略小于1M的。从and...
2019-07-20 18:58:57 1472
原创 java 线程 interrupt 详解
Java interrupt详解 这篇文章可以让你清晰的了解: interrupt() 方法的作用是什么? 对一个线程调用 interrupt() 后,它一定会中断么? 如果不能保证中断,那 interrupt() 的真正作用是什么呢? InterruptedException 具体在什么场景下会出现? 捕获...
2018-11-18 17:23:59 303
原创 技术人的一点儿思考
作为一个技术人,虽然更多的是与机器和代码打交道,但仍然也会有不少感触和思考。安安静静的思考,平平淡淡的文字,写下来,对自己也是一种总结和提升,如果有幸能让你看到,那,还真的很有缘。 如果能带给你启发,就再好不过啦,哪怕只有一点点~ ...
2018-10-28 20:23:47 225
原创 使用Android Studio导出Jar包
对于Android工程,如果我们需要把源码打包为Jar文件,在Eclipse上操作是比较简便的。但是假若使用Android Studio作为IDE的话,操作就相对复杂了一点儿。 背景:AndroidStudio默认打包时,会生成 aar格式的产物,而不是 jar包。 aar和 jar的不同? 首先
2017-01-22 17:32:38 2513
原创 Android Studio 常见问题集锦
收集一些使用Android Studio时遇到过的问题,总结下来,也供以后参考。 Error1:Error:Connection timed out: connect. If you are behindan HTTP proxy, please configure the proxy settings either in IDE or Gradle.
2017-01-20 15:52:52 542
原创 Android Aligned Unaligned Apk
在编译Android app时,我们经常会看到debug得到的apk中,既有 app-debug.apk, 也有app-debug-unaligned.apk。那么他们有什么不同呢?为什么又会有 unaligned的版本呢?首先,我们应该明白一点:不管是app-debug.apk 还是 app-debug-unaligned.apk,都是signed apk。也即是, ap
2017-01-17 16:01:31 4444 1
原创 Android M权限管理机制:Runtime Permission简介
之前的文章中,我们分析了Android的AppOps权限管理机制。( http://blog.csdn.net/hyhyl1990/article/details/46842915 ) 可以说,该机制一直都在(应该是从4.2就开始存在了),但一直没有被真正使用过… 每次Android更新OS版本,都一直是隐藏它的( 一些OEM厂商可能会在某些版本上打开)。 ...
2016-07-19 17:21:13 7440
原创 Android dumpsys工具的基本使用
dumpsys是Android提供的一个用来查看各个系统服务信息的工具,使用起来非常方便和简洁。只需要通过usb连接手机到电脑,然后通过adb命令行即可使用。 1. 查看dumpsys都支持哪些服务的查看 可以通过 adb shelldumpsys –l (小写的L)或者 adb shell dumpsys| grep “DUMP OF SERVICE” 来获取服务的
2016-07-13 20:21:30 930
原创 Java 反射简介
何为反射?反射是一种动态获取运行状态的类的信息(属性和方法等)的能力。简单说,对于Java中任何一个类,我们都可以获取它的属性和方法。如何实现反射?了解它之前,我们首先需要了解Java中的Class类。http://blog.csdn.net/hyhyl1990/article/details/49227301 (Java Class类简介)
2015-10-18 20:32:15 481
原创 Java Class对象简介
何为Class对象?Class是Java中的一个类:java.lang.ClassClass类的每个对象对应于Java应用程序中运行的每个类或接口。换言之,Java中的每个类或接口都有它的一个Class对象,存储着关于类的一些信息。显然,Class对象是跟类 进行mapping的,同一个类的每一个对象拥有相同的Class对象。此外,不仅是对于类,那些Ja
2015-10-18 13:34:11 746
原创 Java 并发 (多线程) 讲解<一>
多线程的概念是相对于顺序编程 而言的,在顺序编程里,程序只能按照一条线进行执行,而多线程可以打破这一限制,实现并发 效果。多线程的基本实现方式继承Thread类通过继承Thread类可以实现新的线程,这样会很简便,但一般来说,是不被建议这样使用的。它最大的缺陷是,一旦继承了Thread类就无法继承别的类,对设计造成一定的影响。以下的demo中,我们通过继
2015-10-06 17:41:15 625
原创 图算法 最短路径 Dijkstra算法
问题背景简介: 最短路径问题是图算法中一个典型和常用的应用问题。例如,某一地区内有N个城市,给定了这N个城市间两两之间的距离,求解城市A 和 B之间的最短距离。 抽象为数学模型:每个城市抽象为一个顶点(结点),两城市间如果有道路相通,道路抽象为边。问题即转化为求图中 两结点之间 边的权值最小的那条路径。 单源最短路径:从一个源点(Source)到其他
2015-08-11 16:42:03 2729
原创 最小生成树 Prime算法
问题背景:对于一个图,它的所有生成树中必有一个“边的权值最小”的生成树,我们把它称为最小生成树。概念很抽象,换做实际问题:有十个城市,各个城市之间距离或远或近。需要建设一个道路网,把十个城市连接在一起,要求道路网的道路长度最小。各个城市的连接可以抽象为一个图,本质上即是求该图的一个最小生成树。每一个图可能有多个生成树,但最小生成树 所有边的权值之和是最小的。 Prime
2015-08-10 09:22:51 5651 2
原创 Android原生权限管理:AppOps
1. AppOps 简介 AppOps全称是 Application Operations,类似我们平时常说的应用程序的操作(权限)管理。AppOps是Google原生Android包含的功能,但是Google在每次版本更新时都会隐藏掉AppOps的入口。 在今年的Google IO大会上,Google透露Android M ( Android 6.0 )
2015-07-11 17:05:27 56599 17
原创 Android中的进程和pid
Pid: Process ID 顾名思义,它指的是Process的id。每个进程都有一个独立的id,可以通过pid来区分不同的进程。 程序 vs 进程:程序是静置的,一般会存放在磁盘中。经过用户的执行,程序会被触发,被加载到内存中成为一个个体:进程。因此,可以说 进程就是一个正在运行的程序。 操作系统会对每一个进程赋予一个id,就是Pid。 以Linux上的 /bin/ba
2015-07-08 18:10:40 20935 2
原创 批处理脚本 批量安装APK
系统开发测试过程中,需要大量安装apk时,常常需要使用工具批量安装。市面上也有一些这样的工具。当然,自己做一些简单的脚本也是比较方便的。我们知道,使用adb安装和卸载apk的命令如下:安装apk:adb install "apk路径"卸载apk:adb install "包名"对于apk的批量安装,我们只需要在此基础上加上对apk文件的遍历即可。例
2015-07-08 11:55:24 10886 2
原创 getRunningTasks API从Android LL开始 权限收敛
最近在做的一个小项目中,需要实时获取Activity栈顶以及它所属的App Process。根据之前的了解,知道Android API有提供一个接口 public ListActivityManager.RunningTaskInfo> getRunningTasks (int maxNum) 可以得到系统当前正在运行的Task列表,用maxNum限制要获取的数量(最近使用
2015-05-13 21:54:46 32621 17
原创 二叉树的遍历
二叉树的遍历的重要性毋庸置疑,是很多算法的基础。遍历二叉树可以分为深度优先遍历和广度优先遍历,其中,深度优先遍历又可以分为先序、中序、后序。提供一个二叉树,可能写出其几种遍历方式的序列并不难,但要完全正确的用代码实现(当然不是用递归啦)可能并不是特别容易。特别是像后序遍历,能写出精简、正确的代码还是要好好思考一下的。下面就对二叉树的几种遍历方式做以分析。(代码大部分都是之前写的,学习数据结
2012-10-15 11:20:03 1524
原创 几个重要库函数的实现-strcpy,strncpy,memcpy,memset
面试官很喜欢让求职者写一些常用库函数的实现,有很多是和字符串相关的,有一些是关于内存拷贝的。一般,常会让写的函数有以下几个:strcpy , strncpy, memcpy。memset一般不会让去写,但这个函数也很有特点,有很多容易用错的地方。一并总结吧。1. strcpystrcpy函数的原型是:char * strcpy(char* dest, const char*
2012-10-14 11:39:39 21235 5
原创 一个有趣的题目—linux中的fork函数分析
首先要介绍一下printf的缓冲机制:printf输出内容时,并不是直接打印到屏幕上,而是先把内容放入到stdout的缓冲队列中。遇到\n或者刷新缓冲等情况时才会输出内容。看一个小例子:#include#include#includeint main(){ printf("hhhh"); //printf("hhhh\n"); int pid=fork();
2012-09-30 10:35:53 1093
原创 计算机网络中的基本概念
什么是网络协议网络协议是为进行网络数据交换而设立的规则、标准或约定。 网络协议分层TCP-IP协议分层:应用层 传输层 网络层 链路层 物理层IP地址分类分为A,B,C,D,E五类:A类:首位是0,后24位(三个八位)是主机地址。 范围:0.0.0.0(特殊地址,后续)——127.255.255.255B类:10开头,后16位主机地址。范围:12
2012-09-21 15:41:43 719
原创 软件测试的相关基本概念
黑盒测试也称为功能测试,它是通过测试来检测每个功能是否可用,不涉及程序的内部逻辑和结构,而是通过程序接口进行测试。黑盒测试时的常用方法:1. 边界测试 (参考:http://blog.csdn.net/a00553344/article/details/1834654) 常用的边界:min-(略小于min,多缺陷假设时使用) max+(略大于max,多缺陷假设时使用) min ,m
2012-09-16 14:17:08 1123
原创 运算符重载分析与实例
运算符重载时的几个关键点:1. 首先,运算符重载不会改变运算符的优先级和结合性。2. 运算符的重载不能改变运算符的运算对象数。因此,重载函数的形参个数(包括成员函数的隐式指针this)与运算符的运算对象数相同。3. 大多数运算符重载函数都可以定义为全局函数(友元函数)或类的成员函数:当定义为成员函数时: 运算符的运算对象数目比函数形参数目少1,因为成员函数第一个
2012-09-08 21:37:20 1510
原创 覆盖(重写) vs 重载 vs 重定义
重写(override),重载(overload),重定义(redefine)的区别参见:http://www.cnblogs.com/BeyondTechnology/archive/2010/09/20/1831441.html 重写又称为覆盖,是指父类的虚函数在子类中被重写(覆盖),返回值和参数列表相同。一般来说,如果父类的某个函数用virtual修饰,即使派生类中的同名函数
2012-09-08 16:31:32 920
原创 关于拷贝构造函数
1. 深拷贝和浅拷贝(拷贝构造函数的使用) 有时候需要自己定义拷贝构造函数,以避免浅拷贝问题。在什么情况下需要用户自己定义拷贝构造函数:一般情况下,当类中成员有指针变量、类中有动态内存分配时常常需要用户自己定义拷贝构造函数。 在什么情况下系统会调用拷贝构造函数:(三种情况)(1)用类的一个对象去初始化另一个对象时(2)当函数的形参是类的对象时(也就是值传递时),如果
2012-09-08 14:14:57 1132 1
原创 友元函数和友元类
1. 使用友元的原因: 类具有封装和信息隐藏的作用,只有类的成员函数才能访问类的私有成员。如果把数据成员都定义为公有的,会破坏类的隐藏特性。但为了访问这些数据成员经常需要多次调用成员函数,会有很多开销。因此才使用友元。 2. 友元的种类 友元可以是一个函数(友元函数),也可以是一个类(友元类)。 友元函数定义在类的外部,它不是类的成员函数,但需要再类体内用关键
2012-09-08 10:31:18 1959
原创 设计模式—工厂模式
1. 工厂模式的由来 软件开发过程中,经常会需要创建“某个对象”,而该对象却又经常变化。但用户需要一个稳定的接口。这就诞生了工厂模式,隔离了该对象的变化,使得系统中其他对象不受其变化的影响,拥有稳定的接口。 2. 类图 3. 示例代码 #include using namespace std;//产品的抽象类class Produ
2012-09-07 22:01:35 669
原创 设计模式—单例模式
1. 类图 2. 示例代码 //单实例模式//注意static变量的初始化位置#include using namespace std;class Singleton{private: static Singleton* sington; //唯一的实例public: Singleton(){} //返回单个实
2012-09-07 20:58:10 425
原创 设计模式—建造者模式
1. 建造者模式的由来 在构建一个复杂对象的时候,经常会有这种情况:该对象是由各个部分的子对象按照一定的步骤或者算法构成。这些子对象也许会经常变化,但它们组合的方式却不变。 以建造小人为例,尽管建造出的小人各不相同,有大有小,有高有低,但都是按照一个流程进行的。头-》身体-》左右手-》左右脚。建造者模式与此类似,在向导的指导下一步一步完成产品的建造。2. 类图表示
2012-09-07 20:46:34 450
原创 设计模式-原型模式
1. 首先分析原型模式的由来 一般来说,创建一个对象可以由以下方法: 知道对象的具体类型,直接用new生成。 不知道型号,知道相应的需求,可以使用工厂方法模式。 根据一个已有的对象来复制为一个新的对象,可以使用原型模式。 2. 原型模式可以简单理解为拷贝原型对象得到新的对象。想象一个配钥匙的小店,给店主一
2012-09-07 16:59:28 604
原创 程序人生-一个程序员对学弟学妹的建议
在一个论坛上看到的帖子,很长。偷一部分过来,慢慢品味。 ****************************************************************************华丽的分割线****************************************************************************
2012-06-03 10:57:00 1248
原创 桶式排序和基数排序
很多排序算法时间复杂度都是O(n2),也有部分排序算法时间复杂度是O(nlogn)。而桶式排序却能实现O(n)的时间复杂度。但它也有自己的不足,首先是空间复杂度比较高,需要的额外开销大。其次,局限性也很明显。待排序的元素都要在一定的范围内等等。桶式排序是一种分配排序。分配排序的特定是不需要进行关键码的比较,但前提是要知道待排序列的一些具体情况。同时排序有两个数组的空间开销,一个存放待排序数
2012-06-02 12:39:08 4542
原创 三种插入排序的分析(直接插入-二分插入-Shell排序)
众多排序算法中,有三种插入排序比较常用。最简单的直接插入,优化后的二分插入排序,以及Shell排序。直接插入最好理解,时间代价:最坏是O(n2),最好是O(n),平均是O(n2)。空间代价是O(1)。二分插入总的移动次数并没有减少,减少的是比较次数。在数组已经有序时,再插入新的元素,使用二分插入比较好。shell排序也是一种插入排序,但它不是相邻的进行插入,而是分组进行,不断缩小组内相
2012-06-02 12:30:47 749
原创 想要的生活
大三了要结束了,要去实习了。这几天的生活却变得颓废起来,昨天在寝室一整天,玩玩三国杀,看几集电视剧。不知道为什么,就是无聊,什么也不想做,就是想打发时间。今天稍微早了一些起床,吃了早饭,看了一会儿书,《拆掉思维里的墙》。有一些启发。曾经想着要做很多事情,有些已经被时间给磨掉了。现在年龄还不大,大学都没毕业,这两天却像一个打了败仗的士兵,没有一点儿斗志。这不是真正的我。我不想要这样的
2012-06-02 10:22:43 928
原创 递归实现归并排序(基本排序算法)
归并排序也是一种很有名的排序算法,分而治之的思想。但与同样是分治的快排相比,归并更侧重于“合”,“分”其实是很简单的。比较重要的一点是归并排序的递归出口问题,当下标left>=right时就不需要再递归了。归并排序的不太好的一点是空间复杂度有点儿高。前一段百度实习生招聘,有一个算法设计就是对merge函数进行优化,把空间复杂度降为O(1),有好的处理方式请留言。最常规的实现方式:
2012-05-28 17:25:36 728
原创 有关快速排序的几点思考
快速排序曾被评为20世纪十大算法之一,最很多情况来说都是名副其实的最快的排序算法。其实思路并不难,但在具体的代码实现时会有很多细节容易出错。也有一些细节如果不加注意会使排序效率意外降低。 大致思路是:从待排序数组中选出一个值(一般是随即选的),对数组进行分割,把小于轴值的放在左侧,大于轴值的放在右侧。然后分别对左侧数组和右侧数组继续进行排序(递归进行)。一直进行下去,最后可以得
2012-05-28 17:12:16 835
转载 李开复给我们的七个建议
(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。
2012-05-27 09:40:38 549
转载 Java工程师面试常见问题(网上收集)
1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称
2012-05-26 12:44:08 916
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人