Android Gradle 插件
个人博客:http://www.milovetingting.cn
Android Gradle 插件Android Gradle 插件简介从Gradle角度来看,Android其实是Gradle的一个第三方插件,它是由Google的Android团队开发的。但从Android角度 来看,Android插件是基于Gradle构建的,和Android Studio完美搭配的新一代构建系统。
Android Gradle 插件分类在Android中有三类工程,一类是App应用工程,它可以生成一个可运行的apk应用。一类是Library库工程,它可以生成AAR包给其它工程使用。一类是Test测试工程,用于对App工程或者Library库工程进行单元测试。
App插件id: com.android.application
Library插件id: com.android.library
Test插件id: com.android.test
应用Android Gradle插件要应用一个插件,必须知道它们的插件id,如果是第三方插件,还需要配置它们的依赖classpath。Android G ...
Drawable
个人博客:http://www.milovetingting.cn
Drawable
Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念。
1、Drawable简介Drawable是一个抽象类,是所有Drawable对象的基类,每个具体的Drawable都是它的子类,比如ShapeDrawable、BitmapDrawable等。
通过getIntrinsicWidth和getIntrinsicHeight这两个方法可以获取到Drawable的内部宽/高。但并不是所有的Drawable都有内部宽/高,比如一张图片所形成的Drawable,它的内部宽/高就是图片的宽/高,但是一个颜色形成的Drawable,它没有内部宽/高。Drawable内部宽/高不等同于它的大小。Drawable是没有大小概念的。
2、Drawable分类
BitmapDrawable
ShapeDrawable
LayerDrawable
对应的XML标签是,表示一种层次化的Drawable集合。
StateListDra ...
Java Gradle 插件
个人博客:http://www.milovetingting.cn
Java Gradle 插件如何应用1apply plugin:'java'
Java插件约定的项目结构123456789Project|--build.gradle|--src |--main |--java |--resources |--test |--java |--resources
main和test是Java插件为我们内置的两个源代码集合,如果想添加自定义的集合,如vip,则可以这样修改:
1234567apply plugin:'java'sourceSets{ vip{ }}
添加一个vip源代码集合,然后我们在src目录下添加vip/java,vip/resources目录,就可以分别存放vip相关的源代码和资源文件了。
特殊情况下,我们需要修改java的文件目录,只需要在build.gradle ...
RemoteViews
个人博客:http://www.milovetingting.cn
RemoteViews
RemoteViews表示的是一个View结构,它可以在其他进程中显示。RemoteViews在Android中的使用场景有两种:通知栏和桌面小部件。
1、RemoteViews的应用RemoteViews在实际开发中,主要用在通知栏的桌面小部件的开发过程中。通知栏主要是通过NotificationManager的notify方法来实现,除了默认效果,还可以另外定义布局。桌面小部件则是通过AppWidgetProvider来实现,AppWidgetProvider本质上是一个广播。RemoteViews运行在系统的SystemServer进程。
AppWidgetProvider除了最常用的onUpdate方法,还有以下几个方法:
onEnable:
当该窗口小部件第一次添加到桌面时调用该方法,可添加多次但只在第一次调用。
onUpdate:
小部件被添加时或者每次小部件更新时都会调用一次该方法,小部件的更新时机由updatePeriodMillis来指定,每个周期小部件都会自动更 ...
Gradle插件
个人博客:http://www.milovetingting.cn
Gradle插件插件的作用把插件应用到项目中,插件会扩展项目的功能,帮助在项目构建过程中做很多事情。
1、可以添加任务到项目中,帮助完成测试、编译、打包等。
2、可以添加依赖配置到项目中,可以通过它们配置项目在构建过程中需要的依赖,如编译时依赖的第三方库等。
3、可以向项目中现有的对象类型添加新的扩展属性、方法等。
4、可以对项目进行一些约定,如应用Java插件后,约定src/main/java目录是我们的源代码存在位置,在编译的时候也是编译这个目录下的Java源代码文件。
如何应用一个插件插件的应用都是通过Project.apply()方法完成的。
应用二进制插件二进制插件就是实现了org.gradle.api.Plugin接口的插件,它们可以有Plugin id。
1apply plugin:'java'
上面的语句,其中’java’就是Java插件的plugin id,它是唯一的。其实它对应的类型是org.gradle.api.plugins.JavaPlugin,所 ...
View的工作原理
个人博客:http://www.milovetingting.cn
View的工作原理1、ViewRoot和DecorViewViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立关联。
View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout和draw三个过程才最终将一个View绘制出来。
measure过程决定了View的宽/高,Measure完成以后,可以通过getMeasuredWidth和getMeasuredHeight方法来获取View测量后的宽/高,在几乎所有的情况下,它等同于View的最终的宽/高,但是特殊情况除外。Layout过程决定了View的四个顶点的 ...
Gradle任务
个人博客:http://www.milovetingting.cn
Gradle任务多种方式创建任务1、直接以一个任务名字创建一个任务的方式:
1234def Task task1 = task(task1)task1.doLast{ println 'task1'}
这种方式的创建其实是调用Project对象中的task(String name)方法。该方法的完整定义:
1Task task(String name) throws InvalidUserDataException
2、以一个任务名字+一个对该任务配置的Map对象来创建任务:
12345def Task task2 = task(task2,group:BasePlugin.BUILD_GROUP)task2.doLast{ println 'task2'}
Task参数Map可用配置
配置项
描述
默认值
type
基于一个存在的Task来创建,和我们类继承差不多
DefaultTask
overwr ...
View的事件体系
个人博客:http://www.milovetingting.cn
View的事件体系1、View基础知识1.1、什么是ViewView是Android中所有控件的基类。View是一种界面层的控件的一种抽象,代表了一个控件。除了View,还有ViewGroup,内部包含了许多个控件,即一组View。
1.2、View的位置参数View的位置主要由它的四个顶点来决定,分别对应于View的四个属性:top、left、right、bottom,其中top是左上角纵坐标,left是左上角横坐标,right是右下角横坐标,bottom是右下角纵坐标。这些坐标都是相对于View的父容器来说的。是一种相对坐标。
width = right - left
height = bottom - top
获取这四个参数的方法:
left=getLeft();
right=getRight();
top=getTop();
bottom=getBottom();
Android3.0开始,View增加了额外的几个参数:x、y、transla ...
Gradle构建脚本基础
个人博客:http://www.milovetingting.cn
Gradle构建脚本基础Settings文件在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置。设置文件的默认名为settings.gradle,放在根工程目录下。
设置文件大多数的作用都是为了配置子工程。根工程相当于Android Studio中的Project,一个根工程可以有很多子工程。
一个子工程只有在Settings文件里配置了Gradle才会识别,才会在构建的时候被包含进去。
12345678910rootProject.name = 'android-gradle'include ':Chapter1'project(':Chapter1').projectDir = new File(rootDir,'Chapter1')include ':Chapter2'project(':Chapter2').projectDir = new File(rootDir, ...
IPC机制
个人博客:http://www.milovetingting.cn
IPC机制1、Android IPC简介
IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。
ANR:Application Not Responding,应用无响应。
2、Android中的多进程模式在Android中使用多进程,可以通过给四大组件在AndroidMenifest中指定android:process属性。默认进程的进程名是包名。
12<activity android:process=":remote"/><activity android:process="com.example.ipc.remote"/>
上述两种声明的区别:
首先,”:”的含义是指要在当前的进程名前附加上当前的包名,即完整进程名为:com.example.ipc:remote,而第二种则为完整的命名方式。其次,进程名以”:”开头的进程属于当前应用的私有进程,其它应用的组 ...