自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AndroidLover

记录点滴

  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 聊一聊Android的Handler(一)

Handler对于Android开发者而言,应该是再熟悉不过的了。每个Handler在创建时,就会绑定于一个特定线程内(创建时所在的线程),同时也绑定于该线程所在的Message Queue。Handler是做什么的?归类下来,其实是两个用处: 1. 管理该线程内未来任务的执行次序。(schedule功能) 2. 不同线程之间的消息通信。(包括UI线...

2019-07-21 17:57:12 348

原创 聊一聊Android的TransactionTooLargeException

是什么?Android OS定义的一种异常类型,binder事务中 发送或接受的序列化对象过大,超过了biner事务缓存区的上限时,该异常就会被抛出。OS通常定义的上限是1M,但这是对整个进程内所有进行的binder事务共用的。根据笔者实践,一次通讯中超过512kb时,就会触发该异常。ps. Google的 Android guide里写的是1M左右,其实是略小于1M的。从and...

2019-07-20 18:58:57 1448

原创 java 线程 interrupt 详解

 Java interrupt详解 这篇文章可以让你清晰的了解:       interrupt() 方法的作用是什么?      对一个线程调用 interrupt() 后,它一定会中断么?      如果不能保证中断,那 interrupt() 的真正作用是什么呢?      InterruptedException 具体在什么场景下会出现?      捕获...

2018-11-18 17:23:59 293

原创 技术人的一点儿思考

        作为一个技术人,虽然更多的是与机器和代码打交道,但仍然也会有不少感触和思考。安安静静的思考,平平淡淡的文字,写下来,对自己也是一种总结和提升,如果有幸能让你看到,那,还真的很有缘。        如果能带给你启发,就再好不过啦,哪怕只有一点点~                                                                ...

2018-10-28 20:23:47 222

原创 使用Android Studio导出Jar包

 对于Android工程,如果我们需要把源码打包为Jar文件,在Eclipse上操作是比较简便的。但是假若使用Android Studio作为IDE的话,操作就相对复杂了一点儿。 背景:AndroidStudio默认打包时,会生成 aar格式的产物,而不是 jar包。 aar和 jar的不同? 首先

2017-01-22 17:32:38 2504

原创 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 534

原创 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 4428 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 7415

原创 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 910

原创 Java 反射简介

何为反射?反射是一种动态获取运行状态的类的信息(属性和方法等)的能力。简单说,对于Java中任何一个类,我们都可以获取它的属性和方法。如何实现反射?了解它之前,我们首先需要了解Java中的Class类。http://blog.csdn.net/hyhyl1990/article/details/49227301  (Java Class类简介)

2015-10-18 20:32:15 476

原创 Java Class对象简介

何为Class对象?Class是Java中的一个类:java.lang.ClassClass类的每个对象对应于Java应用程序中运行的每个类或接口。换言之,Java中的每个类或接口都有它的一个Class对象,存储着关于类的一些信息。显然,Class对象是跟类 进行mapping的,同一个类的每一个对象拥有相同的Class对象。此外,不仅是对于类,那些Ja

2015-10-18 13:34:11 737

原创 Java 并发 (多线程) 讲解<一>

多线程的概念是相对于顺序编程 而言的,在顺序编程里,程序只能按照一条线进行执行,而多线程可以打破这一限制,实现并发 效果。多线程的基本实现方式继承Thread类通过继承Thread类可以实现新的线程,这样会很简便,但一般来说,是不被建议这样使用的。它最大的缺陷是,一旦继承了Thread类就无法继承别的类,对设计造成一定的影响。以下的demo中,我们通过继

2015-10-06 17:41:15 617

原创 图算法 最短路径 Dijkstra算法

问题背景简介: 最短路径问题是图算法中一个典型和常用的应用问题。例如,某一地区内有N个城市,给定了这N个城市间两两之间的距离,求解城市A 和 B之间的最短距离。 抽象为数学模型:每个城市抽象为一个顶点(结点),两城市间如果有道路相通,道路抽象为边。问题即转化为求图中 两结点之间 边的权值最小的那条路径。 单源最短路径:从一个源点(Source)到其他

2015-08-11 16:42:03 2718

原创 最小生成树 Prime算法

问题背景:对于一个图,它的所有生成树中必有一个“边的权值最小”的生成树,我们把它称为最小生成树。概念很抽象,换做实际问题:有十个城市,各个城市之间距离或远或近。需要建设一个道路网,把十个城市连接在一起,要求道路网的道路长度最小。各个城市的连接可以抽象为一个图,本质上即是求该图的一个最小生成树。每一个图可能有多个生成树,但最小生成树 所有边的权值之和是最小的。 Prime

2015-08-10 09:22:51 5632 2

原创 动态规划 基础总结

共享之前的一次技术分享资料,主要是动态规划算法的讲解,比较基础。

2015-08-05 17:40:00 887

原创 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 56534 17

原创 Android中的进程和pid

Pid: Process ID 顾名思义,它指的是Process的id。每个进程都有一个独立的id,可以通过pid来区分不同的进程。 程序 vs 进程:程序是静置的,一般会存放在磁盘中。经过用户的执行,程序会被触发,被加载到内存中成为一个个体:进程。因此,可以说 进程就是一个正在运行的程序。 操作系统会对每一个进程赋予一个id,就是Pid。 以Linux上的 /bin/ba

2015-07-08 18:10:40 20904 2

原创 批处理脚本 批量安装APK

系统开发测试过程中,需要大量安装apk时,常常需要使用工具批量安装。市面上也有一些这样的工具。当然,自己做一些简单的脚本也是比较方便的。我们知道,使用adb安装和卸载apk的命令如下:安装apk:adb install "apk路径"卸载apk:adb install "包名"对于apk的批量安装,我们只需要在此基础上加上对apk文件的遍历即可。例

2015-07-08 11:55:24 10854 2

原创 getRunningTasks API从Android LL开始 权限收敛

最近在做的一个小项目中,需要实时获取Activity栈顶以及它所属的App Process。根据之前的了解,知道Android API有提供一个接口 public ListActivityManager.RunningTaskInfo> getRunningTasks (int maxNum) 可以得到系统当前正在运行的Task列表,用maxNum限制要获取的数量(最近使用

2015-05-13 21:54:46 32585 17

原创 二叉树的遍历

二叉树的遍历的重要性毋庸置疑,是很多算法的基础。遍历二叉树可以分为深度优先遍历和广度优先遍历,其中,深度优先遍历又可以分为先序、中序、后序。提供一个二叉树,可能写出其几种遍历方式的序列并不难,但要完全正确的用代码实现(当然不是用递归啦)可能并不是特别容易。特别是像后序遍历,能写出精简、正确的代码还是要好好思考一下的。下面就对二叉树的几种遍历方式做以分析。(代码大部分都是之前写的,学习数据结

2012-10-15 11:20:03 1514

原创 几个重要库函数的实现-strcpy,strncpy,memcpy,memset

面试官很喜欢让求职者写一些常用库函数的实现,有很多是和字符串相关的,有一些是关于内存拷贝的。一般,常会让写的函数有以下几个:strcpy , strncpy, memcpy。memset一般不会让去写,但这个函数也很有特点,有很多容易用错的地方。一并总结吧。1.  strcpystrcpy函数的原型是:char * strcpy(char* dest, const char*

2012-10-14 11:39:39 21221 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 1083

原创 计算机网络中的基本概念

什么是网络协议网络协议是为进行网络数据交换而设立的规则、标准或约定。 网络协议分层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 707

原创 软件测试的相关基本概念

黑盒测试也称为功能测试,它是通过测试来检测每个功能是否可用,不涉及程序的内部逻辑和结构,而是通过程序接口进行测试。黑盒测试时的常用方法:1. 边界测试 (参考:http://blog.csdn.net/a00553344/article/details/1834654)   常用的边界:min-(略小于min,多缺陷假设时使用) max+(略大于max,多缺陷假设时使用) min ,m

2012-09-16 14:17:08 1110

原创 运算符重载分析与实例

运算符重载时的几个关键点:1. 首先,运算符重载不会改变运算符的优先级和结合性。2. 运算符的重载不能改变运算符的运算对象数。因此,重载函数的形参个数(包括成员函数的隐式指针this)与运算符的运算对象数相同。3. 大多数运算符重载函数都可以定义为全局函数(友元函数)或类的成员函数:当定义为成员函数时: 运算符的运算对象数目比函数形参数目少1,因为成员函数第一个

2012-09-08 21:37:20 1499

原创 覆盖(重写) vs 重载 vs 重定义

重写(override),重载(overload),重定义(redefine)的区别参见:http://www.cnblogs.com/BeyondTechnology/archive/2010/09/20/1831441.html 重写又称为覆盖,是指父类的虚函数在子类中被重写(覆盖),返回值和参数列表相同。一般来说,如果父类的某个函数用virtual修饰,即使派生类中的同名函数

2012-09-08 16:31:32 911

原创 关于拷贝构造函数

1. 深拷贝和浅拷贝(拷贝构造函数的使用) 有时候需要自己定义拷贝构造函数,以避免浅拷贝问题。在什么情况下需要用户自己定义拷贝构造函数:一般情况下,当类中成员有指针变量、类中有动态内存分配时常常需要用户自己定义拷贝构造函数。 在什么情况下系统会调用拷贝构造函数:(三种情况)(1)用类的一个对象去初始化另一个对象时(2)当函数的形参是类的对象时(也就是值传递时),如果

2012-09-08 14:14:57 1116 1

原创 友元函数和友元类

1. 使用友元的原因:    类具有封装和信息隐藏的作用,只有类的成员函数才能访问类的私有成员。如果把数据成员都定义为公有的,会破坏类的隐藏特性。但为了访问这些数据成员经常需要多次调用成员函数,会有很多开销。因此才使用友元。 2. 友元的种类    友元可以是一个函数(友元函数),也可以是一个类(友元类)。    友元函数定义在类的外部,它不是类的成员函数,但需要再类体内用关键

2012-09-08 10:31:18 1950

原创 设计模式—工厂模式

1. 工厂模式的由来    软件开发过程中,经常会需要创建“某个对象”,而该对象却又经常变化。但用户需要一个稳定的接口。这就诞生了工厂模式,隔离了该对象的变化,使得系统中其他对象不受其变化的影响,拥有稳定的接口。 2. 类图      3. 示例代码 #include using namespace std;//产品的抽象类class Produ

2012-09-07 22:01:35 662

原创 设计模式—单例模式

1. 类图       2. 示例代码 //单实例模式//注意static变量的初始化位置#include using namespace std;class Singleton{private: static Singleton* sington; //唯一的实例public: Singleton(){} //返回单个实

2012-09-07 20:58:10 418

原创 设计模式—建造者模式

1. 建造者模式的由来    在构建一个复杂对象的时候,经常会有这种情况:该对象是由各个部分的子对象按照一定的步骤或者算法构成。这些子对象也许会经常变化,但它们组合的方式却不变。    以建造小人为例,尽管建造出的小人各不相同,有大有小,有高有低,但都是按照一个流程进行的。头-》身体-》左右手-》左右脚。建造者模式与此类似,在向导的指导下一步一步完成产品的建造。2. 类图表示

2012-09-07 20:46:34 441

原创 设计模式-原型模式

1. 首先分析原型模式的由来    一般来说,创建一个对象可以由以下方法:            知道对象的具体类型,直接用new生成。            不知道型号,知道相应的需求,可以使用工厂方法模式。           根据一个已有的对象来复制为一个新的对象,可以使用原型模式。 2. 原型模式可以简单理解为拷贝原型对象得到新的对象。想象一个配钥匙的小店,给店主一

2012-09-07 16:59:28 595

原创 程序人生-一个程序员对学弟学妹的建议

在一个论坛上看到的帖子,很长。偷一部分过来,慢慢品味。          ****************************************************************************华丽的分割线****************************************************************************

2012-06-03 10:57:00 1243

原创 桶式排序和基数排序

很多排序算法时间复杂度都是O(n2),也有部分排序算法时间复杂度是O(nlogn)。而桶式排序却能实现O(n)的时间复杂度。但它也有自己的不足,首先是空间复杂度比较高,需要的额外开销大。其次,局限性也很明显。待排序的元素都要在一定的范围内等等。桶式排序是一种分配排序。分配排序的特定是不需要进行关键码的比较,但前提是要知道待排序列的一些具体情况。同时排序有两个数组的空间开销,一个存放待排序数

2012-06-02 12:39:08 4532

原创 三种插入排序的分析(直接插入-二分插入-Shell排序)

众多排序算法中,有三种插入排序比较常用。最简单的直接插入,优化后的二分插入排序,以及Shell排序。直接插入最好理解,时间代价:最坏是O(n2),最好是O(n),平均是O(n2)。空间代价是O(1)。二分插入总的移动次数并没有减少,减少的是比较次数。在数组已经有序时,再插入新的元素,使用二分插入比较好。shell排序也是一种插入排序,但它不是相邻的进行插入,而是分组进行,不断缩小组内相

2012-06-02 12:30:47 737

原创 想要的生活

大三了要结束了,要去实习了。这几天的生活却变得颓废起来,昨天在寝室一整天,玩玩三国杀,看几集电视剧。不知道为什么,就是无聊,什么也不想做,就是想打发时间。今天稍微早了一些起床,吃了早饭,看了一会儿书,《拆掉思维里的墙》。有一些启发。曾经想着要做很多事情,有些已经被时间给磨掉了。现在年龄还不大,大学都没毕业,这两天却像一个打了败仗的士兵,没有一点儿斗志。这不是真正的我。我不想要这样的

2012-06-02 10:22:43 919

原创 递归实现归并排序(基本排序算法)

归并排序也是一种很有名的排序算法,分而治之的思想。但与同样是分治的快排相比,归并更侧重于“合”,“分”其实是很简单的。比较重要的一点是归并排序的递归出口问题,当下标left>=right时就不需要再递归了。归并排序的不太好的一点是空间复杂度有点儿高。前一段百度实习生招聘,有一个算法设计就是对merge函数进行优化,把空间复杂度降为O(1),有好的处理方式请留言。最常规的实现方式:

2012-05-28 17:25:36 714

原创 有关快速排序的几点思考

快速排序曾被评为20世纪十大算法之一,最很多情况来说都是名副其实的最快的排序算法。其实思路并不难,但在具体的代码实现时会有很多细节容易出错。也有一些细节如果不加注意会使排序效率意外降低。         大致思路是:从待排序数组中选出一个值(一般是随即选的),对数组进行分割,把小于轴值的放在左侧,大于轴值的放在右侧。然后分别对左侧数组和右侧数组继续进行排序(递归进行)。一直进行下去,最后可以得

2012-05-28 17:12:16 824

转载 李开复给我们的七个建议

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。

2012-05-27 09:40:38 546

转载 Java工程师面试常见问题(网上收集)

1、面向对象的特征有哪些方面   1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称

2012-05-26 12:44:08 909

动态规划基础讲解

动态规划讲解文档,比较基础,浅显易懂。 大牛请绕道~

2015-08-06

空空如也

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

TA关注的人

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