自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OKhttp源码流程分析笔记

okhttp主要包含构建者模式、责任链模式等。主要流程大致如下:构建者模式构造request    okhttpclient对象   两套字段,在build方法返回赋值。同步是调用在realCall类(实现Call接口)中的execute方法(设置拦截器链)中dispatcher的execute方法把请求添加到同步请求队列。在finally中调用dispatcher的finished方法,...

2019-01-14 21:16:47 164

原创 android WindowManager

项目中有一个到时锁屏的的功能,就是当到达特定时间后,程序弹出一个蒙层将界面锁住,用户不能进行其他操作  (ps:按home键和back键蒙层也还在),除非输入密码或按规定操作,才可移除蒙层。  现将关键的使用代码简化贴出以供参考:public class MainActivity extends Activity { private WindowManager.Layout

2017-07-31 10:22:11 287

原创 Android:Layout_weight属性解析

Layout_weight属性只有在Linearlayout中才有效果。该属性跟android:layout_width为wrap_content和match_parent有很大关系。简单的说:          以如下布局为例:     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

2017-07-31 10:22:02 207

原创 Afinal的简单应用(二)

上篇中叙述了Afinal的finalDB和finalActivity的用法,接下来讲FinalHttp和FinalBitmap。  FinalHttp的使用方法:        FinalHttp 对 HttpClient再次封装,最简洁的就是增加了许多回调的方法,对Get 和 Post 请求进行了简化。此外还有put,delete和download方法。另外一点就是FinalHttp

2017-07-31 10:21:54 329

原创 afinal的简单应用(一)

Afinal简介:Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。Afinal包含四大

2017-07-31 10:21:45 205

原创 android webView与js交互

android中通过WebView控件可以加载网页和本地的html文件。下面是一个简单的android与js交互Demo。 主类:public class MainActivity extends Activity { WebView webview; Button btn; @SuppressLint({ "SetJavaScriptEnabled", "Javasc

2017-07-31 10:21:38 279

原创 android 按钮倒计时读秒

最近项目中有涉及到android倒计时读秒功能的实现,于是上网搜了一下,各种方式都有,但是感觉要么存在bug,要么有点复杂,于是在参考了一些他人的实现方式后,自己写了一个。代码如下:public class MainActivity extends Activity { private TimeCount timeCount; private Button btn; protec

2017-07-31 10:21:32 1422

原创 广播机制方式

安卓系统中广播可以分为两类:普通广播和有序广播。    普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播,就相当于普通的收音机广播;    有序广播则可以定义接受者的优先级,可以在清单文件中配置(intent-filter元素的android:priority属性)或者代

2017-07-31 10:21:24 408

原创 关于 android service 和 thread

在安卓系统中,service是运行在主线程中的,而thread是用来创建子线程的。二者毫无关系! thread的运行时独立于activity的,当一个activity被销毁时,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。当 Activity 被 finish 之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不

2017-07-31 10:21:16 395

原创 handler机制

andriod提供了Handler 和 Looper 来满足线程间的通信。handler是先进先出原则,而looper是用来轮询消息队列的。handler是存在于主线程中的,用来处理子线程通过message发来的数据信息,配合主线程更新UI页面。 handler有两个作用: 安排消息或Runnable 在某个主线程中某个地方执行;                    安排一个动作在不

2017-07-31 10:21:10 222 1

原创 android项目导入eclipse最后不能点击next和finish

一般来说这个问题都是因为项目名称重复了,也就是说将要导入的这个项目的名称与eclipse中原本就存在的某一项目的名称重复了,注意是项目名称,如图中红色圈内所示。最简单的解决方法就是先将eclipse中原来的项目删除,但是如果改项目还有用,那么只需要将eclipse中的项目删除就好,之后还可以再导回来;若没有用了,删除时就可以把delete project content是on disk勾上,直接

2017-07-31 10:21:00 4551 1

原创 ofbiz安装

OFBIZ安装在官网下载ofbiz安装包。地址:http://ofbiz.apache.org/download.htmljava环境强烈推荐JDK1.6版本。虽然更高的版本也可,但是有时候需要更改一些配置文件,对新手来说很麻烦。还有ant包配置环境变量,包括:java的和 ant的之后解压ofbiz安装包。如解压到d:/OFBIZ在命令提示符窗口切换到解压ofbiz安装的文

2017-07-31 10:20:54 415

原创 Windows Installer程序包问题

有时候当安装软件时会提示“Windows Installer 程序包有问题,此安装需要的程序不能运行。请与您的支持人员或程序包开发商联系”,去‘服务’看了Windows Installer也启动了,但就是提示错误。   这时不妨试试这个解决办法:下载安装微软提供的Windows Installer CleanUp Utility,它的主要功能是清除程序的Windows Installer配置信息

2017-07-31 10:20:46 5735

原创 配置weblogic

Weblogic配置文件过程中,在“配置管理服务器”处一般来说要单独取名字与adminServer区分,并且端口也要从新选择。

2017-07-31 10:20:38 154

原创 创建用户 授权

MYSQL中创建新用户语句CREATE USER user01@'localhost' IDENTIFIED BY 'password1';mysql授权:user管理db全部权限GRANT ALL PRIVILEGES ON db.* TO user;

2017-07-31 10:20:30 190

原创 java环境配置

java环境变量配置:classpath:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;Path:%JAVA_HOME%\bin;Java_home:C:\Program Files\Java\jdk1.8.0_25

2017-07-31 10:20:22 159

原创 数据导入 导出

数据库表的导入导出命令exp /imp的执行是在dos命令窗口执行,而不是在sqlplus窗口

2017-07-31 10:20:10 191

原创 Java JVM解析

类加载的过程:类从被加载到虚拟机内存开始,到被卸载出内存为止,生命周期是:加载、验证、准备、解析、初始化、使用和卸载。 加载阶段:(1)通过一个类的权限定名来获取此类的二进制字节流                 (2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。                 (3)在java堆中生成一个代表这个类的class对象,作为方法区这些数

2017-07-29 19:14:55 1158

原创 (二十二) IPC机制通讯

IPC是Inter-Process Communication的缩写。多进程简介Android对单个应用的内存做了限制,早期版本可能是16M。通过给四大组建指定Android:process属性,开启多线程模式,无其他方法。特殊情况通过jni在native层fork一个新的进程。进程以“:”开头的是当前进程的私有进程,其他组件不能和他跑在同一进程,全称是“:”前加包名;而进

2017-07-29 19:06:15 235

原创 (二十一)Android内存、性能优化

性能优化的方法布局优化:利用、以及ViewStub优化      标签只支持以android:layout开头的属性,若设置了android:layout_*属性,则必须有android:layout_width(height)属性。也可设置   id,若布局也有id,以include指定的id为准。      标签可以减少布局的层级。       ViewStub继承了View,

2017-07-29 19:04:08 262

原创 (二十)四大组件的工作过程-ContentProvider

ContentProvider是一种内容共享形组件,通过Binder向其他组件乃至其他应用提供数据,当其所在的进程启动时,CP会同时被启动并被发布到AMS中。注意:这个时候CP的onCreate方法会先于Application的onCreate方法执行。一个应用启动时,入口方法为ActivityThread的main方法,它是一个静态方法,在它内部会创建ActivityThread的实例并创建

2017-07-29 18:59:25 261

原创 (十九)四大组件的工作过程-BroadcastReceiver

广播的注册过程静态广播在程序安装时由系统自动完成注册,具体是由PMS来完成注册动态广播:    1、由ContextWrapper的registerReceiver方法开始,交给ContextImpl的registerReceiver方法来处理。    2、ContextImpl的registerReceiver方法调用自己的registerReceiverInternal方法

2017-07-29 18:57:43 240

原创 (十八)四大组件的工作过程-Service

Service的工作过程启动过程:从ContextWrapper的startService方法来看,看到由ContextImpl的mBase对象的startService方法开始,在startService方法里返回startServiceCommon方法,在该方法里,通过ActivityManagerNative.getDefault()方法启动service。该star

2017-07-29 18:55:36 517

原创 (十七)四大组件的工作过程-Activity

Activity的工作过程从startActivity()方法分析,他有多种重载方法,最终都会调用startActivityForResult(Intent intent,int requestCode,Bundle options)方法,在此方法中会判断mParent对象是否为空,为空进行启动逻辑,调用Instrumentation的execStartActivity方法,需注意mMainT

2017-07-29 18:47:11 199

原创 (十六)Bitmap的加载和Cache

Bitmap的高效加载Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位Bitmap.Config RGB_565:每个像素占四位,即R=5

2017-07-29 18:40:32 260

原创 (十五)Android的线程和线程池

进程:可并发执行且具有独立功能的程序,是操作系统进行资源分配的基本单位。线程:处理器调度和运行的基本单位。Android中的线程分为主线程和子线程,主线程的作用是运行四大组件以及处理他们和用户的交互,而子线程的作用则是执行耗时任务,如网络请求、I/O操作等。从Android3.0后,,系统要求网络访问要在子线程中进行,以防出现ANR现象。 Android中的线程形态之AsyncTa

2017-07-29 18:24:27 265

原创 (十四)Android的消息机制Handler

Android的消息机制主要指的是Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。MessageQueue的中文翻译是消息队列,但其内部存储结构并非队列,而是单链表的数据结构来储存消息列表。Looper可以理解为消息循环,MessageQueue只能存储消息,不能处理 ,而Looper则可以,它会以无限循环的形式去查询讯是否有新的消息。

2017-07-29 18:13:02 185

原创 (十三)Window的创建过程

View是android中视图的呈现方式,但View不能单独存在,必须依附Window这个抽象的概念上,因此有视图的地方就有Window。     Activity的Window的创建过程     Activity的启动过程很复杂,最终会由ActivityThread中的performLaunchActivity()来完成整个启动过程,在此方法中会通过类加载器创建Activity的

2017-07-29 12:19:03 275

原创 (十二)Window和WindowManager的使用解析

Window是一个抽象类,具体实现是PhoneWindow,具体实现位于WindowManagerService中。WindowManager和WindowManagerService的交互是一个IPC的过程。      WindowManager的LayoutParams有两个参数很重要,Flags,表示Window的属性,Type,表示Window的类型。      Window有三种

2017-07-29 12:06:14 315

原创 (十一)RemoteViews的使用解析

使用场景:桌面小部件和通知栏。PendingIntent:待定的意图。  支持三种待定意图:getActivity(Context context,int requsetCode,Intent intent,int Flag)相当于Context.startActivity(intent)                                getService(Co

2017-07-29 12:02:07 649

原创 (十 )View的事件分发机制

点击事件的事件分发,其实就是对MotionEvent事件的分发,即当一个MotionEvent产生后,系统需要把这个事件传递给一个具体的View,而这个传递过程就是分发过程。ViewGroup包含三个方法:dispatchTouchEvevt()、onInterceptTouchEvent()(默认返回false)、onTouchEvent()View包含两个方法:

2017-07-29 09:46:30 227

原创 (九)View的滑动事件

View提供获取坐标的方法: getTop(),getLeft(),getRight()和getBottom()。 获取的是View自身到父布局上下左右的距离。MotionEvent提供的方法:getX()和getY()方法获取的是点击事件距离控件左上的距离。即视图坐标。getRawX()和getRawY()是获取的是点击事件距离整个屏幕顶边的距离,是android坐标

2017-07-29 09:42:28 365

原创 (八)Android的动画机制

实现原理:每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧,若动画未完成,就继续调用invalidate函数,启动下次动画来完成绘制。视图View动画:AlphaAnimatio

2017-07-29 09:35:32 233

原创 (七)android的绘图机制&&Drawable

首先是关于cavans的save和restore方法,save是保存状态。restore是恢复保存之前的状态, 防止save后对Canvas执行的操作对后续的绘制有影响。如:先save(状态1,坐标左上角为0,0),再调用rotate方法做操作(画线之类)(状态2 坐标系旋转90度 右上角为0,0),再调用restore方法恢复到状态1(坐标左上角为0,0  但 所画的线还在,不变).

2017-07-29 09:32:56 190

原创 (六)VIew的绘制过程-measure、layout、draw

View的measure过程由其measure方法来完成,measure是一个final类型的方法,不能重写,因此需在measure方法中调用View的onMeasure方法,在onMeasure方法中又调用setMeasuredDimension方法来设置View宽/高的测量值,该方法的参数是方法getDefaultSize(int size,int measureSpec),该方法在spe

2017-07-27 19:05:25 340

原创 (五)View的测量 MeasureSpec类

MeasureSpec类      MeasureSpec是一个32位的int值,高两位为SpecMode(测量模式),低30位为SpecSize(测量大小)。      SpecMode(测量模式)分类:      EXACTLY模式:父容器已经测出了View所需要的精确大小,此时View的最终大小就是SpecSize所指定的值。对应math_parent和具体数值两种模式。

2017-07-27 19:03:50 253

原创 (四)View的控件架构

Android的控件架构       Android中控件大致分为ViewGroup控件和View控件。在Activity中使用的findViewbyId()方法,就是在控件树中以深度优先遍历查找对应元素。                                                           android UI架构图每个Activvity都包含一

2017-07-27 19:02:17 434

原创 (三)Activity的启动模式

Activity一共四种启动模式:standard、singleTop、singleTask、singleInstance一个任务栈可以有多个实例,每个实例可以属于不同的任务栈。standard模式:标准模式,系统默认。每次启动Activity都会创建新的实例,谁启动的这个Activity,这个Ativity就运行在启动他的那个Activity所在的栈中。但非Activity类型的Cont

2017-07-27 19:01:29 160

原创 (一)activity的生命周期分析

onCreate:Activity被创建,做初始化工作。     onReStart:activity正在重新启动。如:当前activity从不可见 变为可见。     onStart: Activity已经可见,但不可与用户交互。(在后台,人看不到)。     onResume:Activity可见并且可与用户交互。     onPause:Activity正在停止,正常情况会紧

2017-07-27 18:58:25 153

原创 (二)onSaveInatanceState()和onRestoreIntanceState()

当系统只会在activity 异常终止时,会通过调用onSaveInstanceState()方法(在onStop方法之前,可在onPause之前和之后)将Activity状态保存到Bundle对象中。当Activity被重新创建后,调用onRestoreInstanceState()(在onStart方法后),把保存的Bundle对象传给onRestoreInstance()和onCreat

2017-07-27 18:56:38 536

空空如也

空空如也

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

TA关注的人

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