自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 AsyncTask 源码解析

一、AsyncTask 示例 class WorkTask extends AsyncTask<Integer, Integer, String> { @Override protected void onPreExecute() { super.onPreExecute(); Log.d(...

2019-04-01 20:00:20 230

转载 Android官方开发文档Training系列课程中文版:如何避免ANR?

原文地址:http://android.xsoftlab.net/training/articles/perf-anr.html#anr转载地址:http://blog.csdn.net/sahadev_/article/details/52764317尽管你写代码可能通过了世界上所有的性能测试,但是它还是可能会让人感觉到卡顿。当应用卡的不成样子时,系统会给你弹一个”Appli

2016-10-21 15:20:10 498

原创 Android系统OTA升级包制作

Android系统升级分为整包升级和差分包升级,整包升级就是将系统中所有的数据都升级,而差分包及增量包,只是针对系统中更新的部分进行升级。一般来说,像大版本升级,比如从4.4升级到5.0,采用整包升级,平时的小版本升级就使用差分包升级。但不管哪种方式,升级流程都是一样的,只是在制作升级包的过程中有些差别。那这两者有啥区别呢?区别:1、包的大小,整包就相当于ROM,有好几百兆;差分包

2016-10-21 14:16:55 3899 1

原创 Android系统OTA升级流程

Android系统进行升级的时候,有两种途径,一种是通过接口传递升级包路径自动升级,升级完之后系统自动重启;另一种是手动进入recovery模式下,选择升级包进行升级,升级完成之后停留在recovery界面,需要手动选择重启。前者多用于手机厂商的客户端在线升级,后者多用于开发和测试人员。但不管哪种,原理都是一样的,都要在recovery模式下进行升级。1、获取升级包,可以从服务端下载,

2016-10-20 18:03:03 32234 3

原创 Android系统SD卡升级

一般在本地进行OTA升级时,将升级包拷贝到SD卡,然后进入recovery模式选择升级包进行升级,但不是很方便,于是做了一个小应用,通过调用RecoverySystem类中的接口来进行升级。实际上最终也是在recovery模式下进行升级,只不过是在应用层对升级包进行签名验证和发送升级命令。    内容比较简单直接上代码。一、主要类SdCardUpgradeWarning.jav

2016-10-20 18:00:35 3580

原创 HandlerThread,子线程中处理Handler消息

Handler用来处理异步消息,这个我们都知道,一般来说消息的处理都是在主线程中,比如后台获取数据,然后到主线程中更新。那如果我们需要消息的处理也在子线程中呢?Android系统提供了HandlerThread类,方便的解决了这个问题(当然也可以自己实现Thread和Looper,请参考Android消息机制)。示例代码public class MainActivity exten

2016-10-19 18:12:38 633

原创 使用Messenger实现进程间通信(IPC)

我们在使用远程服务时,需要进行进程间通信,可以通过实现AIDL接口。编写aidl文件也比较麻烦,有么有什么比较简单的方法呢?Android系统中提供了Messenger类,可直接实现客户端和服务端的交互。代码示例server端:public class MyService extends Service { Handler handler = new Handler(

2016-10-19 18:12:14 440

原创 灵活的服务,IntentService用法及原理

我们都知道,在Android中,耗时的操作不能再主线程中执行,需要另开线程。比如,在一个Activity中,需要读取数据,就需要开辟一个子线程来处理。这样做会有一个问题,如果该任务还没有执行完,Activity已经被销毁了,那么该进程也就销毁了,大部分情况下不需要做特殊处理,但有时候我们希望即使Activity销毁后,该任务仍能继续处理,这时就需要使用后台服务了--service了。Service

2016-10-19 18:11:48 524

原创 自定义轮播图SlideView

轮播图主要用于广告的展示,在开发过程中很常用,之前项目上也是参考了网上资料做的(具体哪个资料找不着了),效果还是不错的。最近一个同事不知道从网上找了个轮播图,直接用到了新项目上,把sdk最低改成了19,这哪成。我就看了下依赖的这个项目,写的实在不怎么样,肯定不能直接依赖的,在其基础上做些优化倒是可以的。于是,我就把之前项目上轮播图整理了下。    gitHub托管地址:https://gith

2016-08-09 18:18:40 567

原创 OrmLite数据库升级

在应用开发过程中,随着需求的不断变化,难免会修改数据库,或是增加一张表,或是增加一个字段。这就需要对数据库进行升级,我们只要升级数据库的版本号,那么下次使用时就会自动调用onUpgrade方法,当然具体的修改需要我们自己来实现。    最简单粗暴的方法就是将原来的表全部删除,然后重新创建,之前的代码示例中就是这么做的。 @Override public void onCrea

2016-08-06 11:45:57 2741 1

原创 OrmLite数据库切换

当应用由不同的用户登录时,我们一般会对不同的用户创建不同的数据库。所以,当用户改变时,我们也应当切换到该用户相应的数据库上。那么,如何做呢?    我们操作数据库,最终都是通过DatabaseHelper实例来处理的,那好办,我们只要改变DatabaseHelper实例就可以了。我们把实例置为空,根据新的数据库名生成新的实例。    以下代码在http://blog.csdn.net/di

2016-08-05 16:27:51 748

原创 OrmLite的封装

转载请注明出处http://blog.csdn.net/dingfengnupt88/article/details/52129439

2016-08-05 15:33:50 1316 1

原创 ListView中只添加Header是不显示的

今天同事让帮看一个问题,说是ListView添加Header没有显示出来。我感到很奇怪,以前也没碰到过这个问题,我就去帮看了一下。看了下布局文件是否正确,代码中是否正常的添加了,都没什么问题。纠结了好长时间,最后发现ListView仅仅添加了header,没有通过setAdapter设置数据,所以header是不显示出来的。平时正常的使用时不会只添加header的,所以之前没有碰到过类似的问题。

2016-08-02 22:45:21 1147

原创 Glide开源库

github托管:https://github.com/bumptech/glide官方文档:https://github.com/bumptech/glide/wiki引用项目compile 'com.github.bumptech.glide:glide:3.7.0'基本用法1、加载图片    加载网络地址url值为"http://img15.3

2016-07-31 18:02:10 2336

原创 Launcher3--抽屉

抽屉是用来放置安卓手机中所有需要显示到Launcher上的(当然也可以进行过滤,将不想显示的隐藏起来)应用和小部件,启动应用、添加快捷方式到桌面、卸载等。之前也提到过,有些Launcher是没有抽屉的,如MIUI的Launcher。在Launcher3中,默认是有的,当然,也提供了不显示抽屉的方法,这个后面会说到,在此我们还是先了解下抽屉。  一、布局    抽屉的布局文件是a

2016-07-09 23:38:52 4460 1

原创 Launcher3--壁纸

在说Launcher上设置壁纸时,首先需要弄清楚的是,壁纸的设置属于系统行为,而不是Launcher的应用特性。在Launcher中,壁纸的设置最终也是通过调用系统壁纸设置接口来完成的,所有,不仅仅是Launcher,很多第三方应用也是可以设置壁纸的。    Android中,可以使用WallpaperManager这一壁纸管理类来设置壁纸,有如下几种方法,    我们可以根据

2016-07-05 18:11:05 4637

原创 Launcher3--拖拽

在Launcher3中,有三处长按拖拽处理:主屏幕(Workspace)上的图标和小部件文件夹中的图标抽屉中的图标和小部件    这三种情况的拖拽处理是相似的的,我们只需知道其中一种,其他的也就不难理解了。在此我们以拖拽Workspace上的图标为例,分析整个拖拽的过程。一、长按处理    Launcher3上的拖拽处理都是通过长按开始的,然后经过一系列

2016-07-03 18:36:43 5931 4

原创 Launcher3--加载流程

Launcher也是一个普通的应用程序,只不过在主入口中加入>属性,这样在开机启动后,就会首先找到这个应用,第一个加载。     那分析Launcher的加载流程时,也可以按照一般的应用来分析就行了。一、Application类的加载    如果应用继承了Application类,那么该应用启动时就会首先执行继承了Application的类的onCreate()

2016-07-01 15:05:09 7771 2

原创 Launcher3--初识Launcher3

一、Launcher简介    Launcher时开机完成后第一个启动的应用,用来展示应用列表和快捷方式、小部件等。Launcher作为第一个(开机后第一个启动的应用)展示给用户的应用程序,其设计的好坏影响到用户的体验,甚至影响用户购机的判断。所以很多品牌厂商都会不遗余力的对Launcher进行深度定制,如小米的MIUI、华为的EMUI等。Android默认的Launcher没有过多的定制,更

2016-07-01 11:02:21 12061 1

原创 Android绘图

在Android开发过程中,常常需要自定义View,需要自己绘制图片效果或者需要一些动态效果,我们就可以使用Android提供的绘图工具进行绘制。绘图的三要素Canvas--画布,Paint--画笔,Rect/RectF--绘图区域,只要掌握了这几个要素就基本上可以满足我们大部分需求。一、Canvas--画布 可以理解为美术课上的画板,这个类提供了绘制各种基本图形的方法,如下图所

2016-06-14 14:14:42 439

原创 属性动画之ValueAnimator

ValueAnimator是属性动画中的一个重要的类,其内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。ObjectAnimator其实就是ValueAnimator的一个子类,之所以先了解ObjectAnimator

2016-06-01 16:50:11 814

原创 属性动画之ObjectAnimator

ObjectAnimator,通过设置改变对象的属性来实现动画效果,常用的方法有这么几种,ofFloat(),ofInt(),ofObject(),ofArgb(),ofPropertyValuesHolder(),具体含义及使用我们在下面的实例中进行讲解。一、动画类型 使用ObjectAnimator也是可以轻松的实现平移、缩放、旋转、透明度这几种动画效果的,与渐变

2016-06-01 16:38:33 7858

原创 Android源码解析setContentView

当我们在Activity中设置布局文件时,执行setContentView(R.layout.main);代码,我们只需要传入资源文件即可,剩下的工作就有系统来完成了,那么这个过程是怎样一个流程?是这篇文章要分析的内容。一、Activity的setContentView方法  直接上代码,public void setContentView(View view, ViewGroup

2016-05-26 14:25:47 619

原创 ubuntu下配置adb环境变量

1、下载sdk,将其拷贝到home目录下2、

2014-09-21 14:50:28 834

原创 Android消息机制

消息模型 一、UI线程什么是UI线程?Android应用在启动时间会首先创建一个主线程(main thread),它是应用程序的入口,主要负责管理UI以及分发事件,习惯上称之为UI线程(UI thread)。 1、  不是线程安全的,对UI的操作操作必须在UI线程中进行,否则系统将抛出异常;ProgressBar通过setProgress更新UI?在更新进度的时

2014-07-26 16:17:18 562

原创 Android笔记--属性

我们在布局文件中,会对一些控件设置一些属性,这些属性都是定义好的,使用的时候设定该属性的,否则就是用默认值。主要看framework下是如何定义属性的及使用。一、属性定义,在values中创建一个attrs.xml文件,然后如下几种格式定义属性、1、一般格式1、       其中Format值有如下几种2、 "reference" //引用  3、 "col

2014-07-14 21:56:26 675

原创 Android笔记--Notification

一、什么是Notification?Android的通知用来提示用户的某个非紧急事件的发生,会在statusBar上面做出一些图片、文字的提示,打开通知栏之后能看到更多的信息,甚至是通过点击进入一个应用,比如我们常见的短信、Email、Wifi通知等都是Notification案例。 二、Notification分类1、普通Notification如下图所示,就是一个普通的No

2014-07-03 15:55:24 1130

原创 Android四大组件----BroadcastReceiver

一、什么是BroadcastReceiver?就是广播接收者,用于接收广播的Intent,可以接收应用程序发出的广播,也可以是系统发出的,如电量变化、插拔耳机、开机完成等等,然后再做相应的事件处理,其广泛应用于应用程序间的信息传输。 二、有哪几种广播?1、普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接

2014-06-18 16:41:49 931

原创 Android AIDL的使用

在Android开发中,使用Service,就不得不提到AIDL,AIDL(AndroidInterface Definition Language)是一种接口定义语言,用于生成可以在Android设备上两个进程之间进行进程间通信(IPC)的代码。使用AIDL语言,可以自动生成服务接口、服务代理、服务Stub代码。使用AIDL实现IPC服务的步骤如下:1、 使用AIDL语法,创建.aidl

2014-06-09 14:50:32 759

原创 Android四大组件----Service

一、Service简介Android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一个线程,

2014-06-07 15:54:15 718

原创 eclipse安装C/C++插件cdt

对于Eclipse开发工具,我们主要进行的是java的开发,但是很多情况下不得不使用C或C

2014-05-29 17:10:45 878

原创 Ubuntu下NDK配置

1、下载ndk,http://developer.android.com/tools/sdk/ndk/index.html   现在的电脑一般下载Linux 64-bit (x86)  android-ndk-r9d-linux-x86_64.tar.bz2就可以了2、将下载好的ndk包解压到/home目录下3、将ndk命令添加到环境变量里面   vim ~/.pr

2014-05-29 17:05:07 991

转载 15个顶级Java多线程面试题及回答

Java 线程面试问题在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的。他们会问面试者很多令人混淆的Java线程问题。面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面。用于直

2014-05-27 14:24:02 2040 1

原创 Java文件I/O操作

要把程序数据保存到文件中,就一定要使用哪个I/O输入输出技术。Java中提供的I/O操作可以把数据保存到多种类型的文件。大多数的应用程序都需要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络。IO就是指应用程序对这些设备的数据输入和输出。在程序中,键盘被用做文件输出。Java语言定义了许多类专门负责各种方式的输入输出,这些类都被放在java.io包中。一、File类     

2014-05-19 15:46:29 975

原创 Java多线程(3)

七、线程间通信    线程间通信,主要介绍问题的引出和如何解决等内容。1、问题的引出  实例:     把一个数据存储空间划分为两个部分:一部分用于存储人的姓名,另一部分用于存储人的性别。这里包含两个线程:一个线程向数据存储空间添加数据(producer),另一个线程从数据存储空间去除数据(consumer)。这个应用会出现两种意外。     第一种意外:假设produ

2014-05-12 21:27:54 683

原创 Java多线程(2)

四、多线程的同步1、同步问题的引出   在前面分析售票系统的时候,有如下代码          if(count>0){               System.out.println(Thread.currentThread().getName()+" count = "+count--);          }   这种情况下会碰到一些意外,同一张票被打印两次获多次,

2014-05-10 14:08:20 632

原创 Java多线程(1)

多线程的机制是指可以同时运行多个程序块,是程序运行的效率变的更高。一、两种多线程的实现方式如果要在类里要激活线程,必须先做好下面两个准备:    1、线程必须扩展子Thread类,使自己成为它的子类    2、线程的处理必须编写在run()方法里面继承Thread类来实现多线程,其基本语法如下class 类名称 extends Thread{     

2014-05-09 15:01:45 619

AsyncTask 源码解析.pdf

Handler 常用来多线程之间传递消息,AsyncTask 内部实现 InternalHandler,用来发送和处理消息 MESSAGE_POST_RESULT、MESSAGE_POST_PROGRESS,对应 AsyncTask 的回调方法 onProgressUpdate 和 onPostExecute,这两个方法都是要在 UI 线程回调的。

2019-09-02

Glide使用Demo

Glide使用Demo

2016-07-31

Launcher3-master-androidstudio

Launcher3的Androidstudio版本

2016-07-01

ORMliteDemo

对开源库ormlite进行了封装,方便的用于实际应用的开发

2016-02-04

Android原生录音机

Android原生录音机,可以在eclipse中直接编译

2015-09-07

ubuntu扫盲文档

用于了解ubuntu常用命令,包含系统的一些使用和软件的安装等等

2014-08-06

Linux常用命令全集

Linux常用命令,如果对Linux命令不是很熟悉或有遗忘的可以通过该文本进行查找

2014-08-06

Android消息机制

详细描述了android的消息机制,重点讲解了Looper、Handler等概念

2014-05-15

Java API 中文版

详细介绍了Java中的常见类以及其构造函数、方法等,方便开发人员查阅,是中文的哦

2014-05-14

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

TA关注的人

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