heng615975867的专栏

私信 关注
Loong.xu
码龄9年

青春的诀别是不是意味着年迈的将近;其实,青春,她一直都在继续.

  • 2,581,413
    被访问量
  • 214
    原创文章
  • 1,175
    作者排名
  • 2,549
    粉丝数量
  • 毕业院校 江西师范大学科学技术学院
  • 目前就职 小鹏汽车
  • 于 2012-03-26 加入CSDN
获得成就
  • 获得261次点赞
  • 内容获得213次评论
  • 获得357次收藏
荣誉勋章
兴趣领域
  • #Android
    #性能优化#面试#Android Studio#Java#数据结构#gradle
TA的专栏
  • router&binder&ioc
    10篇
  • 面试
    2篇
  • 并发编程
    15篇
  • Android 系统底层
    1篇
  • Framework层07-包管理
    2篇
  • Framework层05-WM
    1篇
  • Framework层04-AMS
    2篇
  • Framework层02-常用组件
    8篇
  • 插件化
    22篇
  • Framework01-启动流程
    8篇
  • java加密与解密
    10篇
  • tangram
    12篇
  • http
    10篇
  • java基础
    30篇
  • Android View效果和功能
    133篇
  • FFMPEG
    43篇
  • gradle
    15篇
  • 设计模式
    23篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Android中重启程序自己的几种方法

1.Intent intent = new Intent(this, Object.class);startActivity(intent);2. 通过ActivityManager来重新启动应用程序:ActivityManager manager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);manager.restartPackage("com.example.test");3. 通过flag
翻译
28阅读
0评论
0点赞
发布博客于 29 天前

Android多语言方案

Android多种语言切换的最优方案
zip
发布资源于 2 月前

DragView.7z

自定义ViewGroup实现的DragView,可以长按Item拖拽交换位置的组件源码
7z
发布资源于 2 月前

自适应流媒体传输大总结

自适应流媒体传输(一)——DASH媒体内容的生成自适应流媒体传输(二)——为什么要使用fragmented MP4自适应流媒体传输(三)——和TS格式说再见自适应流媒体传输(四)——深入理解MPD自适应流媒体传输(五)——正确认识码率切换...
原创
61阅读
0评论
0点赞
发布博客于 2 月前

AOP的AspectJ实现方案来做语言切换

AOP的实现有三种,IOC,JavaSisst,AspectJ。AspectJ的Demo最少,这次成功调试出一个
7z
发布资源于 3 月前

StarUML Setup 3.0.2.7z

1.下载文件app.asar 2.安装StarUML 3.安装完成后打开文件安装目录下的resource,我的是 “C:\Program Files\StarUML\resources” 找不到的可以右键点击桌面上的StarUML,选择“打开文件所在位置”即可 4.将下载的app.asar文件替换resources目录下的app.asar文件即可
7z
发布资源于 3 月前

TabLayout+ViewPager+Fragment复用+Gson解析本地数据

本Demo是TabLayout+ViewPager+Fragment滑动复用结构,Fragment使用了一个三级RecycleView,数据来源于Gson本地解析
7z
发布资源于 3 月前

Binder传输机制原理(二)

1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向binder驱动发出BC_REPLY语义。当BC_语义经由binder驱动递送到目标端时,会被binder驱动自...
翻译
75阅读
0评论
0点赞
发布博客于 3 月前

Binder传输机制原理(一)

1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码。在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于应用层次的东西,仅靠它当然无法完成精确打击。其实,在binder驱动层,还有个与之相对的结构,叫做binder_proc。为了说明问题,我修改了初始篇中的示意图,得到下图:1.1 创建bind...
翻译
81阅读
0评论
0点赞
发布博客于 3 月前

热门标签等自动换行的流式布局+瀑布流照片墙UI实现的优化方案

一、android 的app中经常看见热门标签等自动换行的流式布局,当上面一行的空间不够容纳新的TextView时候,才开辟下一行的空间, 如左下面作图所示,TextView的个数和包含的字符长度都是可以任意指定的。 二、整个界面会根据屏幕的宽度划分成等宽的若干列,这里我们就分成三列。每当需要添加一张图片时,会将这张图片的宽度压缩成和列一样宽,再按照同样的压缩比例对图片的高度进行压缩,然后在这三列中找出当前高度最小的一列,将图片添加到这一列中。之后每当需要添加一张新图片时,都去重复上面的操作,就会形成瀑布流格局的照片墙
zip
发布资源于 4 月前

Hook技术--Activity的启动过程的拦截

Hook技术--Activity的启动过程的拦截1、寻找Hook点的原则Android中主要是依靠分析系统源码类来做到的,首先我们得找到被Hook的对象,我称之为Hook点;什么样的对象比较好Hook呢?自然是容易找到的对象。什么样的对象容易找到?静态变量和单例;在一个进程之内,静态变量和单例变量是相对不容易发生变化的,因此非常容易定位,而普通的对象则要么无法标志,要么容易改变。我们根据这个原则找到所谓的Hook点。2、寻找Hook点通常点击一个Button就开始Activity跳转了,这中
翻译
65阅读
0评论
0点赞
发布博客于 5 月前

Android包管理机制(二)PackageInstaller安装APK

Android包管理机制(二)PackageInstaller安装APK前言在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInstaller是如何安装APK的。本系列文章的源码基于Android8.0。1.PackageInstaller中的处理紧接着上一篇的内容,在PackageInstallerActivity调用startInstallConfirm
翻译
138阅读
0评论
0点赞
发布博客于 5 月前

Android包管理机制(一) PackageInstaller的初始化

Android包管理机制(一) PackageInstaller的初始化前言包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一。包指的是Apk、jar和so文件等等,它们被加载到Android内存中,由一个包转变成可执行的代码,这就需要一个机制来进行包的加载、解析、管理等操作,这就是包管理机制。包管理机制由许多类一起组成,其中核心为PackageManagerService(PMS),它负责对包进行管理,如果直接讲PMS会比较难以理解,因此我们需要一个切入点,这个切入
翻译
142阅读
0评论
0点赞
发布博客于 5 月前

Android解析WindowManager(一)WindowManager体系

Android解析WindowManager(一)WindowManager体系前言WindowManagerService(WMS)和AMS一样,都是Android开发需要掌握的知识点,同样的,WMS也很复杂,需要多篇文章来进行讲解,为何更好的理解WMS,首先要了解WindowManager,这一篇我们来学习WindowManager体系。1.Window、WindowManager和WMSWindow我们应该很熟悉,它是一个抽象类,具体的实现类为PhoneWindow,它对View进行管
翻译
112阅读
0评论
1点赞
发布博客于 5 月前

Android解析ActivityManagerService(二)ActivityTask和Activity栈管理

Android解析ActivityManagerService(二)ActivityTask和Activity栈管理前言关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够。这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理。1.ActivityStackActivityStack是一个管理类,用来管理系统所有Activity的各种状态,其内部维护了TaskRecord的列表,因此从Activity任务栈这一角度来说,Activi
翻译
80阅读
0评论
0点赞
发布博客于 5 月前

Android解析ActivityManagerService(一)AMS启动流程和AMS家族

Android解析ActivityManagerService(一)AMS启动流程和AMS家族前言此前在Android系统启动流程、应用进程以及深入四大组件这三个系列文章中,都提及到了AMS,但都没有系统的来讲解它,本文就以AMS为主来进行讲解,其中会有一些知识点与这些系列文章有所重合,这里会尽量做到详尽讲解。阅读此文章前,最好阅读相关文章中列出的系列文章,否则我不敢保证这篇文章你能看的懂。1.概述AMS是系统的引导服务,应用进程的启动、切换和调度、四大组件的启动和管理都需要AMS的支持。从
翻译
36阅读
0评论
0点赞
发布博客于 5 月前

Android深入四大组件(八)广播的注册、发送和接收过程

Android深入四大组件(八)广播的注册、发送和接收过程前言我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册、接收和发送过程。建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分,本文不再赘述。1.广播的注册过程BroadcastReceiver的注册分为两种,分别是静态注册和动态注册,静态注册在应用安装时由PackageManagerService来完成注册过程,关于这一过程,我会在后续的介绍PackageMana
翻译
60阅读
0评论
0点赞
发布博客于 5 月前

Android深入四大组件(七)Service的绑定过程

Android深入四大组件(七)Service的绑定过程前言我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大组件(二)Service的启动过程这篇文章,知识点重叠的部分,本篇文章将不再赘述。1.ContextImpl到ActivityManageService的调用过程我们可以用bindService方法来绑定Service,它的实现在Contex
翻译
31阅读
0评论
0点赞
发布博客于 5 月前

Android深入四大组件(六)Service的启动过程

Android深入四大组件(六)Service的启动过程前言此前我用较长的篇幅来介绍Android应用程序的启动过程(根Activity的启动过程),这一篇我们接着来分析Service的启动过程。建议阅读此篇文章前,请先阅读Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章。1.ContextImpl到ActivityManageService的调用过程要启动Service,我们会调用startService方法,它的
翻译
17阅读
0评论
0点赞
发布博客于 5 月前

Android深入四大组件(五)Android8.0 根Activity启动过程(二)

Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)前言在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,And
翻译
28阅读
0评论
0点赞
发布博客于 5 月前

Android深入四大组件(四)Android8.0 根Activity启动过程(一)

Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)前言在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,And
翻译
51阅读
0评论
0点赞
发布博客于 5 月前

Android深入理解Context(三)Context完全解析

Android深入理解Context(三)Context完全解析1· Context类型 我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver...
翻译
24阅读
0评论
0点赞
发布博客于 5 月前

Android深入理解Context(二)Activity和Service的Context创建过程

Android深入理解Context(二)Activity和Service的Context创建过程前言上一篇文章我们学习了Context关联类和Application Context的创建过程,这一篇我们接着来学习Activity和Service的Context创建过程。需要注意的是,本篇的知识点会和深入理解四大组件系列的部分文章的知识点相重合。1.Activity的Context创建过程当我们在Activity中调用startActivity方法时,其实调用的是Context的startA
翻译
20阅读
0评论
0点赞
发布博客于 5 月前

Android深入理解Context(一)Context关联类和Application Context创建过程

Android深入理解Context(一)Context关联类和Application Context创建过程前言Context也就是上下文对象,是Android较为常用的类,但是对于Context,很多人都停留在会用的阶段,这个系列会带大家从源码角度来分析Context,从而更加深入的理解它。1.Context概述Context意为上下文或者场景,是一个应用程序环境信息的接口。在开发中我们经常会使用Context,它的使用场景总的来说分为两大类,它们分别是:使用Context调用方法
翻译
48阅读
0评论
0点赞
发布博客于 5 月前

Android Activity启动流程, app启动流程,APK打包流程, APK安装过程

Android Activity启动流程, app启动流程,APK打包流程, APK安装过程1.Activity启动流程 (7.0版本之前)从startActivity()开始,最终都会调用startActivityForResult()在该方法里面会调用Instrumentation.execStartActivity()执行(Instrumentation主要用来监控应用程序和系统的交互)启动,execStartActivity()方法里面有2个方法,一个是ActivityManagerNa
翻译
84阅读
0评论
1点赞
发布博客于 5 月前

Android应用程序启动过程(二)分析

Android应用程序启动过程(二)分析本文依据Android6.0源码,从点击Launcher图标,直至解析到MainActivity#OnCreate()被调用。Launcher简析Launcher也是个应用程序,不过是个特殊的应用。俗称“桌面”。通过PackageManagerService查询所有已安装的应用程序,并保存相应的图标、应用名称、包名和第一个要启动的类名等。源码位置:frameworks/base/core/java/android/app/LauncherActi.
翻译
46阅读
0评论
0点赞
发布博客于 5 月前

Android应用程序启动过程(一)总结

Android应用程序启动过程(一)总结一.App启动方式1,冷启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用。冷启动的特点:因为系统会重新创建一个新的进程分配给它,所以会创建和初始化Application,在创建和初始化它的Launch Activity(onCreate onMesure onLayout,ondraw),最后展示在界面上2.热启动热启动:当启动应用时,后台存在该应用的进程(back键,home键,应用退出,但是没有销毁)
翻译
71阅读
0评论
0点赞
发布博客于 5 月前

Android应用程序进程启动过程

Android应用程序进程启动过程(一)在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,而不是应用程序启动过程。关于应用程序启动过程,我会在后续系列的文章中讲到。1.应用程序进程概述  要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经被启动。ActivityManagerService在启动应用程序时会检查这个应用程序需要的应用程序进
翻译
83阅读
0评论
0点赞
发布博客于 5 月前

Android系统启动流程(四)Launcher启动过程与系统启动流程

Android系统启动流程(四)Launcher启动过程与系统启动流程此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前三篇文章的内容来讲解Android系统启动流程。建议读这篇文章前要通读本系列的前三篇文章,否则你可能不会理解我在讲什么。1.Launcher概述Android系统启动的最后一步是启动一个Home应用程序,这个应用程序用来显示系统中已经
翻译
77阅读
0评论
0点赞
发布博客于 5 月前

Android系统启动流程(三)解析SystemServer进程启动过程

Android系统启动流程(三)解析SystemServer进程启动过程1.Zygote启动SystemServer进程在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示。frameworks/base/core/java/com/android/internal/os/ZygoteInit.javaprivate static boolean startSystemServer(String a
翻译
46阅读
0评论
0点赞
发布博客于 5 月前

Android系统启动流程(二)解析Zygote进程启动过程

Android系统启动流程(二)解析Zygote进程启动过程1.Zygote简介在Android系统中,DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM的实例拷贝。关于init启动zyg.
翻译
14阅读
0评论
0点赞
发布博客于 5 月前

Android系统启动流程(一)解析init进程启动过程

Android系统启动流程(一)解析init进程启动过程整体流程大致如下:1.init简介init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。本文将基于Android7.0源码来分析Init进程。2.引入init进程说到init进程,首先要提到Android系统启动流程的前几步:...
翻译
51阅读
0评论
0点赞
发布博客于 5 月前

Android系统启动流程 总结

Android系统启动流程 总结整体流程大致如下:Android系统的启动,主要是指Android手机关机后,长按电源键后,Android手机开机的过程。从系统角度看,Android的启动程序可分为:1、bootloader引导 2、装载与启动Linux内核 3、启动Android系统 3.1、启动Init进程 3.2、启动Zygote 3.3、启动SystemService 3.4、启动Launcher ...
翻译
14阅读
0评论
0点赞
发布博客于 5 月前

Android系统架构与系统源码目录

Android系统架构与系统源码目录1.Android系统架构Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。应用框架层(Java Framework)应用框架层为开发人员提供了可以开发应用程序所需要的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java Framework。下面来看这一层所提供的主要的组件。名称 功能描述 Activit.
翻译
115阅读
0评论
0点赞
发布博客于 5 月前

Java并发编程(四)synchronized

Java并发编程(四)synchronized一.synchronized同步方法或者同步块在了解synchronized关键字的使用方法之前,我们先来看一个概念:互斥锁,顾名思义:能到达到互斥访问目的的锁。举个简单的例子:如果对临界资源加上互斥锁,当一个线程在访问该临界资源时,其他线程便只能等待。在Java中,每一个对象都拥有一个锁标记(monitor),也称为监视器,多线程同时访问某个对象时,线程只有获取了该对象的锁才能访问。在Java中,可以使用synchronized...
翻译
22阅读
0评论
0点赞
发布博客于 5 月前

Java并发编程(三)Thread类的使用

一.线程的状态线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。当需要新起一个线程来执行某个子任务时,就创建了一个线程。但是线程创建之后,不会立即进入就绪状态,因为线程的运行需要一些条件(比如内存资源,在前面的JVM内存区域划分一篇博文中知道程序计数器、Java栈、本地方法栈都是线程私有的,所以需要为线程分配一定..
转载
38阅读
0评论
0点赞
发布博客于 5 月前

Java并发编程(二)同步

  在多线程的应用中,两个或者两个以上的线程需要共享对同一个数据的存取。如果两个线程存取相同的对象,并且每一个线程都调用了修改该对象的方法,这种情况通常成为竞争条件。  竞争条件最容易理解的例子就是:比如火车卖票,火车票是一定的,但卖火车票的窗口到处都有,每个窗口就相当于一个线程,这么多的线程共用所有的火车票这个资源。并且无法保证其原子性,如果在一个时间点上,两个线程同时使用这个资源,那他们取出的火车票是一样的(座位号一样),这样就会给乘客造成麻烦。解决方法为,当一个线程要使用火车票这个资源时,我们就交.
翻译
22阅读
0评论
0点赞
发布博客于 5 月前

Java并发编程(一)线程定义、状态和属性

一、线程和进程1、什么是线程和进程的区别:线程是指程序在执行过程中,能够执行程序代码的一个执行单元。在java语言中,线程有四种状态:运行、就绪、挂起和结束。进程是指一段正在执行的程序。而线程有时也被成为轻量级的进程,他是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内空间(代码段、数据段和对空间)及一些进程级的资源(例如打开的文件),但是各个线程都拥有自己的栈空间。2、为何使用多线程在操作系统级别上来看主要有以下几个方面:a、使用多进程可以减少程序的相应时间,
翻译
35阅读
0评论
0点赞
发布博客于 5 月前

Android拆分与加载Dex的多种方案对比

对于Android大型程序来说,64k方法数与线性内存的限制都是必须要考虑的问题。对于它们的原理与分析,可参考下面这篇文章:http://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html。同时Android官方也推出了自己的解决方案,但却不能满足所有应用的需求。事实上,解决64K方法限制的唯一方法是拆分多dex,不同方案的差异在于需指定哪些类必须在主dex,这与我们期待的效果以及加载方式相关。解决
翻译
256阅读
0评论
0点赞
发布博客于 8 月前

Android Dex分包原理、方案和加解密

the_q系列:1、ant方式进行dex分包《Android Dex分包》2、Android Dex分包—Gradle方式3、android Dex文件的加载Android Studio中Dex分包方案Android app dex加密原理AndroidStudio中,如何使用 MultiDex (apk中生成多个dex、dex分包)...
原创
112阅读
0评论
0点赞
发布博客于 8 月前

Android打包apk原理与流程

Android Dex分包一、Ant原始命令行打包流程。首先总结一下apk打包的一个大致流程,方便后边大家理解。大致分为三步,每一步中又包含了一些详细的操作步骤:打包生成.dex文件。 打包生成resouse.zip文件。 生成.apk文件并签名。1.打包生成.dex文件。我们如果想要生成.dex文件,必须通过工具将一些资源与java代码生成.class文件,其中包含一些资源文件、所有java代码文件、aidl文件等。首先需要在环境变量中配置好我们将要用到的工具,包括...
翻译
208阅读
0评论
0点赞
发布博客于 8 月前

JNI开发(三)局部引用、全局引用和弱全局引用

这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象。所以讲得比较细,有不足的地方,还请见谅!《Android JNI局部引用表溢出:local reference table overflow (max=512)》这篇文章是一个JNI引用使用不当造成引用表溢出,最终导致程序崩溃的例子。建议看完这篇文章之后,再去看。做Java的朋友都知道,在编码的过程当中,内存管理这一块
转载
130阅读
0评论
0点赞
发布博客于 9 月前

JNI开发(二)方法签名与Java通信

本篇文章将通过以下两部分内容来介绍JNI开发:Android NDK开发 JNI类型签名和方法签名 JNI实现java与c/c++相互通讯一、Android NDK开发 JNI类型签名和方法签名在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 。在JNI的世界里也存在类似的数据类型,与Java比较起来,其范围更具严格性,如下:1、primitive types ----基本数据类型,如:int、 float 、char等基本类型2、reference types--
翻译
104阅读
0评论
0点赞
发布博客于 9 月前

JNI开发(一) 静态注册与动态注册

静态注册原理:根据函数名来建立 java 方法与 JNI 函数的一一对应关系;实现流程:编写 java 代码;利用 javah 指令生成对应的 .h 文件;对 .h 中的声明进行实现;弊端:编写不方便,JNI 方法名字必须遵循规则且名字很长;编写过程步骤多,不方便;程序运行效率低,因为初次调用native函数时需要根据根据函数名在JNI层中搜索对应的本地函数,然后建立对应关系,这个过程比较耗时;JNIEXPORT jstring JNICALLJava_com_exampl
翻译
128阅读
0评论
0点赞
发布博客于 9 月前

5年Android提升面试题

在博主认为,对于Android面试以及进阶的最佳学习方法莫过于刷题+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。博主总结了一系列大厂面试中常问的面试技术点,深入解析以及答案,将为最近准备面试的各开发者去大厂保驾护航,何谓面试? 博主所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。以下是博主总
原创
551阅读
0评论
0点赞
发布博客于 9 月前

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

  在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。  以下是本文目录大纲:  一.CountDownLatch用法  二.CyclicBarrier用法  三.Semaphore用法  若有不正之处请多多谅解,并欢迎批评指正。  请尊重作者劳动成果,转载请标明原文链接:  http://www.cnblogs.com/dolphin0
翻译
78阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:ConcurrentLinkedQueue

简介在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,下面我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列ConcurrentLink...
翻译
54阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:线程池的使用

  在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。  那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?  在Java中可以通过线程池来达到这...
翻译
45阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:阻塞队列

  在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。  在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了...
翻译
77阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:并发容器之CopyOnWriteArrayList

  原文链接:  http://ifeve.com/java-copy-on-write/    Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrit...
翻译
63阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:同步容器

  为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。  以下是本文的目录大纲:  一.为什么会出现同步容器?  二.Java中的同步容器类  三.同步容器的缺陷  若有不正之处请多多谅解,并欢迎批评指正。  请尊重作者...
翻译
104阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:深入剖析ThreadLocal

  想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。  以下是本文目录大纲:  一.对ThreadLocal的理解  二.深入解析ThreadLocal类  三.Thre...
翻译
55阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:synchronized、Lock、Volatile

  虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。  以下是本文的目录大纲:  一.什么时候会出现线程安全问题?  二.如何解决线程安全问题?  三.synchronized同步方法或者同步块  ...
翻译
116阅读
0评论
0点赞
发布博客于 10 月前

Java并发编程:Thread类的使用

  在前面2篇文章分别讲到了线程和进程的由来、以及如何在Java中怎么创建线程和进程。今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。  以下是本文的目录大纲:  一.线程的状态  二.上下文切换  三.Thread类中的方法  若有不正之处,请多多谅解并欢迎批评指正。...
转载
97阅读
0评论
0点赞
发布博客于 10 月前

Java加密体系-java.security包

一、JCA/ JCE JCA(Java Cryptography Architecture) 是Java体系结构,提供了基本Java加密框架,比如证书、数字签名、消息摘要、秘钥对生成器等,在java.security包中实现。 JCE(Java Cryptography Extension)是JCA的扩展,主要负责提供DES、AES、RSA、DSA这样的加密算法,因为加密算法是会不...
翻译
866阅读
0评论
1点赞
发布博客于 10 月前

Router(四):打造自己的深度链接库DeepLinkSo实战

前言今天是这个系列的最后一篇,如果你还看过之前的内容,可以先阅读:Android:从零开始打造自己的深度链接库(一):ARouter简介Android:从零开始打造自己的深度链接库(二):ARouter源码解析Android:从零开始打造自己的深度链接库(三):自定义XML协议我们将借鉴ARouter的开发思路,扩展新的功能。上一篇我们已经订好了XML协议,并且把XML中的内容...
翻译
116阅读
0评论
0点赞
发布博客于 10 月前

Router(三):自定义XML协议

前言之前我们把ARouter的原理分析了一遍,如果你是刚启动的新项目,建议立刻使用,哪天运营有这个需求了,你就可以牛逼的对他说,我早就已经做好了。但是老项目就会有一丢丢的尴尬,所以我们要在ARouter的基础上,独立深度链接的功能,然后打造出加强版的深度链接库,我起名为DeepLinkSo。正文回顾一下ARouter的源码,我们记得他使用的是自定义注解,完成路由的注册和绑定。注解看...
翻译
94阅读
0评论
0点赞
发布博客于 10 月前

ARouter(二)源码解析

前言这一篇我们来具体看一下ARouter的实现原理,如果你之前没有接触过ARouter,可以先阅读上一篇:Android:从零开始打造自己的深度链接库(一):ARouter简介废话不多,我们赶紧分析源码。正文首先我们从github下载最新的源码:被选中的三个Module是我们今天分析的重点:arouter-annotation从名称看我们可以猜到这是自定义注解的库,我...
翻译
167阅读
0评论
0点赞
发布博客于 10 月前

ARouter(一):简介

前言在应用开发中,原生app经常内嵌Web,节省开发的成本,这种情况我们通过注入JS脚本来解决原生和Web的通信问题。那么相反,在浏览器环境中,Web又如何启动App呢?这就是深度链接的出现的原因。深度链接看着是一个很6的名字,实际上就是隐式启动的一种,所以说有文化就是不一样。隐式启动最大的优势在于不明确指定启动页面的名字,通过各种过滤参数,找到符合条件页面,对匹配的过程解耦,堪称路由模式...
翻译
145阅读
0评论
0点赞
发布博客于 10 月前

Tangram 2.0——猫客页面内组件的动态化方案

Tangram 2.0 库AndroidTangram-Android Virtualview-AndroidiOSTangram-iOS Virtualview-iOS背景技术背景一直以来,无线应用都在不断寻求动态化页面的解决方案,在阿里巴巴集团内,除了风风火火地 Weex 项目外,各个团队都有大大小小的解决方案。我们猫客一直持续基于Tangram方案来解决页面动...
翻译
349阅读
0评论
0点赞
发布博客于 10 月前

Tangram 的基础 —— vlayout(Android)

前言vlayout 是手机天猫 Android 版内广泛使用的一个基础 UI 框架项目 提供了一个用于RecyclerView的自定义的LayoutManger,可以实现不同布局格式的混排,目标是支撑客户端native页面的快速开发。它也是Tangram 框架的基础模块,现已开源,欢迎移步到github上指教。简介背景Android中UI性能消耗主要来自于两个方面:布局层...
翻译
192阅读
0评论
0点赞
发布博客于 10 月前

苹果核 - vlayout使用说明(二)

前言vlayout 的设计思路请参考Tangram 的基础 —— vlayout(Android)。框架已经开源,欢迎移步到github上指教。本文介绍 vlayout 的基本布局样式上的属性说明。margin, paddingMargin, padding就是外边距、内边距,概念与Android系统的margin, padding一样,但也有不同的地方:它不是整个Recy...
翻译
98阅读
0评论
0点赞
发布博客于 10 月前

vlayout使用说明(一)

前言vlayout 的设计思路请参考Tangram 的基础 —— vlayout(Android)。框架已经开源,欢迎移步到github上指教。本文介绍 vlayout 的基本使用。默认实现默认通用布局实现,解耦所有的View和布局之间的关系: Linear, Grid, 吸顶, 浮动, 固定位置等。 LinearLayoutHelper: 线性布局 GridLayoutHel...
翻译
141阅读
0评论
0点赞
发布博客于 10 月前

RecyclerView 里的自定义 LayoutManager 的一种设计与实现

很久很久以前,我分享过一篇文章,介绍了团队推出的一种异构的自定义 LayoutManger 的实现,它是基于 LinearLayoutManager 扩展实现的,这个项目的名字叫 vlayout,也许你以前听说过,或者在 github 上看到过,虽然还存在不少 bug 和不足,但能得到不少同学的支持,真是感到欣慰。image关于它的设计思路,其实在文章《Tangram 的基础 —— v...
翻译
296阅读
0评论
0点赞
发布博客于 10 月前

Tangram 知识图谱

为了方便大家对 Tangram 有个全局的了解,做了一张图谱做指导。相关开源库AndroidTangram-Android Virtualview-Android vlayout UltraViewPageriOSTangram-iOS Virtualview-iOS LazyScrollView工具virtualview_tools摘自:苹果核 - T...
原创
68阅读
0评论
0点赞
发布博客于 10 月前

VirtualView Android 实现详解(三)—— 添加一个自定义控件

本系列文章《VirtualView Android实现详解(一)—— 文件格式与模板编译》 《VirtualView Android 实现详解(二)—— 虚拟控件的设计与实现》前文介绍了模板的基本格式、虚拟控件与原生控件混合使用的方式。本文重点在把这两块内容串起来介绍一下,如何实现从模板生成一个运行时的控件,并如何注册一个自定义控件使用。相关开源库AndroidTangram-...
翻译
87阅读
0评论
0点赞
发布博客于 10 月前

VirtualView 工具大更新

前文《天猫客户端组件动态化的方案——VirtualView 上手体验.md》都提到了自定义模板编译成二进制数据的过程,在 Android 版的 Playground 里内置了一个编译工具可以实时调测,然而业务开发过程中,不可能在手机上编译,而是在电脑或者后台去编译模板。因此这里提供了一个独立的工具来编译模板,这里介绍下它的使用方法。前世今生工具的源码也提交在github上。在一开始的设...
翻译
58阅读
0评论
0点赞
发布博客于 10 月前

提升开发体验,预览 VirtualView

前文《天猫客户端组件动态化的方案——VirtualView 上手体验.md》都提到了自定义模板编译成二进制数据的过程,在 Android 版的 Playground 里内置了一个编译工具可以实时调测,然而业务开发过程中,不可能在手机上编译,而是在电脑或者后台去编译模板。因此这里提供了一个独立的工具来编译模板,这里介绍下它的使用方法。前世今生工具的源码也提交在 github 上。在一开始的设...
翻译
44阅读
0评论
0点赞
发布博客于 10 月前

天猫客户端组件动态化的方案——VirtualView 上手体验

在之前的文章《猫客 Tangram 页面内组件的动态化方案》、VirtualView Android实现详解(一)里介绍了 VirtualView 方案,不过内容都侧重与设计和实现原理,在进一步介绍其他细节之前,还是先来直观感受下它是什么、它能实现的效果和它的使用方式吧。VirtualView 简介什么是 VirtualView简单讲,就是我们实现了一系列自定义控件,建立的通过自定义 ...
翻译
187阅读
0评论
0点赞
发布博客于 10 月前

VirtualView Android 实现详解(二)—— 虚拟控件的设计与实现

本文介绍 VirtualView 方案里虚拟化控件的原理,包括尺寸计算与布局的实现,以及它与原生控件组合使用时的逻辑交互。相关开源库AndroidTangram-Android Virtualview-Android名词解释 VirtualView:如果还不清楚,可以阅读《天猫客户端组件动态化的方案——VirtualView 上手体验》大概了解下; 原生控件:就是通...
翻译
128阅读
0评论
0点赞
发布博客于 10 月前

VirtualView Android实现详解(一)—— 文件格式与模板编译

在之前的文章《猫客 Tangram 页面内组件的动态化方案》里介绍了 Tangram 页面的组件动态化方案,但是有很多细节没有展开讲,鉴于内容比较多,打算建一个系列,分多篇文章介绍。本文介绍编译 XML 模板的过程。AndroidTangram-Android Virtualview-AndroidiOSTangram-iOS Virtualview-iOS名词解释Virt...
翻译
71阅读
0评论
0点赞
发布博客于 10 月前

android Okio

深入理解okio的优化思想Android 善用Okio简化处理I/O操作
原创
127阅读
0评论
0点赞
发布博客于 10 月前

Android消息推送MQTT

Android消息推送MQTT实战Android使用Mqtt协议链接ActiveMQ服务器实现推送
原创
84阅读
0评论
0点赞
发布博客于 10 月前

android Atomic

atomic的实现原理android AtomicBoolean类的使用Android AtomicInteger使用
原创
51阅读
0评论
0点赞
发布博客于 10 月前

Android App 安全的HTTPS 通信-自定义TrustManager

漏洞描述对于数字证书相关概念、Android 里 https 通信代码就不再复述了,直接讲问题。缺少相应的安全校验很容易导致中间人攻击,而漏洞的形式主要有以下3种:自定义X509TrustManager。在使用HttpsURLConnection发起 HTTPS 请求的时候,提供了一个自定义的X509TrustManager,未实现安全校验逻辑,下面片段就是常见的容易犯错的代码片段。...
翻译
603阅读
0评论
2点赞
发布博客于 10 月前

Android WebSocket的使用

Android WebSocket实现即时通讯功能Android WebSocket 长连接推送Android使用OkHttp WebSocket基于okhttp和RxJava封装的自动重连的WebSocketgithub:https://github.com/dhhAndroid/RxWebSocket...
原创
148阅读
0评论
0点赞
发布博客于 10 月前

Java分布式跟踪系统Zipkin

Java分布式跟踪系统Zipkin系列Java分布式跟踪系统Zipkin(十):Zipkin源码分析-ElasticsearchStorageJava分布式跟踪系统Zipkin(九):Zipkin源码分析-MySQLStorageJava分布式跟踪系统Zipkin(八):Zipkin源码分析-KafkaCollectorJava分布式跟踪系统Zipkin(六):Brave源码分析-...
原创
76阅读
0评论
0点赞
发布博客于 10 月前

java.nio.ByteBuffer用法小结

文章目录 简介 初始化 向ByteBuffer写数据 手动写入数据 从SocketChannel中读入数据至ByteBuffer 从ByteBuffer中读数据 复位position 读取数据 确保数据长度 字节序处理 继续写入数据 总结 简介在Java的Socket编程中,若使用阻塞式(BIO),则往往通过Ser...
翻译
45阅读
0评论
0点赞
发布博客于 10 月前

lib_coder.zip

工程是一个library。 算法集合: 1、电子邮件传输算法——Base64 2、验证数据完整性——消息摘要算法——用于验证数据完整性服务 3、初等数据加密——对称加密算法——用于保证数据保密性服务 4、高等数据加密——非对称加密算法——用于保证数据保密性服务 5、带密钥的消息摘要算法——数据签名算法——用于抗否认性服务( 电子商务系统应有效防止商业欺诈行为的发生,保证商业信用和行为的不可否认性,保证交易各方对已做交易无法抵赖) 6、终极武器——数字证书 7、终极装备——安全协议
zip
发布资源于 11 月前

高等数据加密——非对称加密算法

对称加密算法仅有一个密钥,既可用于加密,亦可用于解密。而非对称加密算法拥有两个密钥,一个用于加密,另一个则用于解密。相比对称加密算法的单钥体系,非对称加密算法的双钥体系更为安全。但非对称加密的缺点是加解密速度要远远慢于对称加密。目前,Java 6中仅仅提供了DH和RSA两种算法实现。通过Boucy Castle可以获得ElGamal算法支持。DH算法的使用DH(Diffie-Hellm...
原创
58阅读
1评论
0点赞
发布博客于 11 月前

终极装备——安全协议

HTTPS=HTTP+SSL/TLS,位于应用层。SSL/TLS协议本身是带加密信息的传输层协议,数字证书正是为这种协议提供相关加密/解密信息。SSL/TLS协议涉及多种加密算法,包括:消息摘要算法:MD5和SHA1对称加密算法:RC2、RC4、IDEA、DES、Triple DES和AES非对称加密算法:RSA和DH数字签名算法:RSA和DSA模型分析1、协商算法服务端和...
原创
43阅读
0评论
0点赞
发布博客于 11 月前

终极武器——数字证书

数字证书也称电子证书,由数字证书颁发认证机构(CA)签发才具备可认证性。数字证书采用了公钥基础设施(PKI),使用了相应的加密算法确保网络应用安全性:非对称加密算法用于对数据进行加密/解密操作,确保数据的机密性。 数字签名算法用于数据进行签名/验证操作,确保数据的完整性和抗否性。 消息摘要算法用于对数字证书本身做摘要处理,确保数字证书完整性。数字证书常用算法1、非对称加密算法:RSA...
原创
136阅读
0评论
0点赞
发布博客于 11 月前

带密钥的消息摘要算法——数字签名算法

数字签名算法可以看做是一种带有密钥(公钥+私钥)的消息摘要算法,也就是说,数据签名算法是非对称加密算法和消息摘要算法的结合体。该算法包含签名和验证两项操作,遵循 “私钥签名,公钥验证” 的签名/验证方式。数字签名算法消息传递模型1、甲方构建密钥对,并能公布公钥给乙方。2、甲方想乙方发送数据需要附加签名。3、乙方使用公钥和签名验证数据。数字签名算法消息传递模型经典数字签名算法...
原创
309阅读
0评论
0点赞
发布博客于 11 月前

初等数据加密——对称加密算法

对称加密算法是当今应用范围最广,使用频率最高的加密算法。根据加密方式分为密码和分组密码,分组密码工作模式又可分为ECB、CBC、CFB、OFB和CTR等,密钥长度决定了加密算法的安全性。DES算法的使用DES(Data Encryption Standard,数据加密标准)算法,是对称加密算法的典型算法。由于密钥长度不足,衍生出了DESede算法(三重DES)。为替代DES算法,又有了AE...
原创
73阅读
0评论
0点赞
发布博客于 11 月前

provider.BouncyCastleProvider库导入用于算法和生成证书

关于使用算法找不到类org.bouncycastle.jce.provider.BouncyCastleProvider的问题,本人尝试了网上N多方法都不行后,自己尝试解决了问题,以分享出来。没有JAVA_HOME的需要配置环境,JDK环境变量的配置1、网上搜索的方法基本都是这种,本人没有解决问题找到JAVA_HOME路径 将bcprov-jdk14-145.jar放入JAVA_HOME...
原创
4481阅读
0评论
2点赞
发布博客于 11 月前

验证数据完整性——消息摘要算法

消息摘要算法包含MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)共3大系列,常用于验证数据的完整性,是数字签名算法的核心算法。消息摘要算法又称为散列算法,其核心在于散列函数的单向性。即通过散列函数可获得对应的散列值,但不可通过该散列值反推原始信...
原创
1175阅读
0评论
0点赞
发布博客于 11 月前

电子邮件传输算法——Base64

Base64算法的转换方式属于古典加密算法的单表置换算法。一段文字经过Base64编码后面目全非,而经过该算法解码后又能恢复本来面目,这很有加密解密的意味。但该算法充当秘钥的字符映射表是公开的,加密强度并不够高,所以该算法并不是加密算法。Base64算法消息传递模型Base64算法Base64是一种基于64个字符的编码算法,广泛用于电子邮件传输。经过Base64编码后数据为原...
原创
58阅读
0评论
0点赞
发布博客于 11 月前

Java加密与解密总结

学习目标:了解加密算法选型,并能使用正确的算法进行加密。学习目录:1、电子邮件传输算法——Base642、验证数据完整性——消息摘要算法——用于验证数据完整性服务3、初等数据加密——对称加密算法——用于保证数据保密性服务4、高等数据加密——非对称加密算法——用于保证数据保密性服务5、带密钥的消息摘要算法——数据签名算法——用于抗否认性服务( 电子商务系统应有效防止商业欺诈行为的发生,...
原创
102阅读
0评论
0点赞
发布博客于 11 月前

Http协议总结(面试)

HTTP和HTTPS协议,看一篇就够了Http协议面试题小结
原创
267阅读
0评论
0点赞
发布博客于 11 月前

Okhttp3 研究总结 (面试)

OKhttp3 是最近比较主流的网络请求框架。面试中,常会问道你对okhttp3是否有深入的了解。在这篇文章我总结了下okhttp3的原理(非用法,用法自己百度就行),以及大神们根据源码分析OKhttp3比较好的文章。1.首先是大神们对OKhttp3的源码分析:(转载)Android OkHttp(三)源码解析:https://blog.csdn.net/zxw136511485/arti...
原创
298阅读
2评论
1点赞
发布博客于 11 月前

okhttp源码深入解析

OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中。目前比较流行的Retrofit也是默认使用OkHttp的。所以OkHttp的源码是一个不容错过的学习资源,学习源码之前,务必熟练使用这个框架,否则就是跟自己过不去。use -> running source code -> reading & learning the source code....
翻译
580阅读
0评论
1点赞
发布博客于 11 月前

OkHttp3源码分析

基本使用从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的.建议大家下载 OkHttp 源码之后,跟着本文,过一遍源码。官方博客栗子:http://square.github.io/okhttp/#examplesOkHttpClient client = new OkHttpClient();String run(String url) throws IOE...
翻译
70阅读
0评论
0点赞
发布博客于 1 年前

okhttp的使用与封装

一、介绍1、特性OkHttp是一个精巧的网络请求库,有如下特性: 
支持http2,对一台机器的所有请求共享同一个socket 
 内置连接池,支持连接复用,减少延迟 
 支持透明的gzip压缩响应体 
通过缓存避免重复的请求 
请求失败时自动重试主机的其他ip,自动重定向 
好用的API其本身就是一个很强大的库,再加上Retrofit2、Picasso的这一套组合拳,使...
原创
296阅读
0评论
0点赞
发布博客于 1 年前

Android Studio 自定义Gradle 插件

https://www.jianshu.com/p/26537645566bAndroid Studio 自定义Gradle Plugin 包含github demohttps://www.jianshu.com/p/d53399cd507bhttps://www.jianshu.com/p/bcaf9a269d96
翻译
100阅读
0评论
0点赞
发布博客于 1 年前

Android AIDL实践

概述AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言,它是用来实现进程间通讯的,本文使用AIDL写一个小demo来实现夸进程间通讯AIDL介绍文件类型:用aidl书写的文件的后缀是.aidl 数据类型:基本类型, 字符串类型(String&CharSequence), List, Ma...
翻译
67阅读
0评论
0点赞
发布博客于 1 年前

Android调试注解处理器AnnotationProcessor

  在开发的过程中有时候我们为了使代码更简洁、运行速度更高或者提高开发效率。通常情况下我们都需要自己开发一套框架或者借助第三方开源框架来实现这个目的。例如:我们可以借助ButterKnife来去掉findViewById、设置点击事件等重复的操作,通过EventBus可以方便的订阅以、发布、接收事件等。这样可以大大的提高我们的开发效率。  今天先介绍如何调试注解编译器AnnotationPro...
翻译
181阅读
0评论
0点赞
发布博客于 1 年前

android自定义注解之Element详解

基本介绍element指的是一系列与之相关的接口集合,用于建模java编程语言元素的接口,它们位于javax.lang.model.element包下面element是代表程序的一个元素,这个元素可以是:包、类/接口、属性变量、方法/方法形参、泛型参数。element是java-apt(编译时注解处理器)技术的基础,因此如果要编写此类框架,熟悉element是必须的。Ele...
翻译
599阅读
0评论
0点赞
发布博客于 1 年前

Android 自定义注解(Annotation)

现在市面上很多框架都有使用到注解,比如butterknife库、EventBus库、Retrofit库等等。也是一直好奇他们都是怎么做到的,注解的工作原理是啥。咱们能不能自己去实现一个简单的注解呢。注解(Annotation)是JDK1.5新增加功能,注解其实就是添加在类、变量、方法、参数等前面的一个修饰符一个标记而已(不要把他想的太复杂)。比如下面的代码里面@Ov...
翻译
68阅读
0评论
0点赞
发布博客于 1 年前

Android ContentProvider原理分析

目录ContentProvider概述 类图 时序图 源码解析 installProvider ContentResolver中的CURD acquireProvider 到AMS获取ContentProvider publishContentProvider removeDyingProvider 总结1. ContentProvider概述...
翻译
181阅读
0评论
0点赞
发布博客于 1 年前

设计模式(十七)---责任链模式

https://blog.csdn.net/self_study/article/details/52012370
翻译
38阅读
0评论
0点赞
发布博客于 1 年前