自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 应用启动流程分析

一、系统环境启动imageAndroid手机开机启动Linux内核,它会去加载system/core/init/init.rc文件,启动init进程。init进程的主要作用:负责开关机界面文件系统的创建和挂载启动Zygote(孵化器)进程启动ServiceManager,它是Binder的“DNS”,管理着所有Android系统服务在init进程启动后会去fork一个...

2021-04-27 18:06:04 437

原创 《将博客搬至CSDN》

本人将博客搬至CSDN

2019-10-24 23:23:09 136

原创 从概念上理解什么是Binder?

前言Android有很多跨进程通信方式,比如:Bundle(四大组件)、文件共享、AIDL、Messenger、ContentProvider、Socket,除了文件共享和Socket,其他的方式都是基于Binder,那Binder究竟是什么,本文将从概念上解开疑惑。一、什么是Binder?对于Binder通常有以下几种解释:1.Binder机制是Android系统独有的I...

2019-10-18 20:44:15 3022

原创 React Native-贝塞尔曲线实现波浪效果

一、背景项目需要开发一个自定义组件,需要有波浪流动的效果,准备使用贝塞尔曲线作为模型来实现,发现ART这个库可以用来绘制各种曲线,于是就打算使用它了。二、设计思路2.1 曲线模型利用二阶贝塞尔模型来模拟:不熟悉贝塞尔曲线的可以先了解一下这个模型,先看下图:bezier.png图中用了两端二阶贝塞尔曲线的组合(P1、P3分别是控制点),把它当做构成波浪组件的...

2019-05-30 00:21:09 1537 1

原创 React Native-自定义组件之Slider

一、背景最近在进行原生模块改造RN的时候需要用到一个定制的可拖动进度条,但发现react-native自带的Slider仅仅是在iOS平台上支持,所以决定自己来定制一个。二、设计思路组合基础组件和View和Image,搭配PanResponder进行手势监听即可完成。三、定制方法,分为如下几步:1.声明属性首先确定该组件暴露给使用者的属性,以下代码中定义的很多属性基本能...

2019-05-19 15:19:27 1364

原创 Android-自定义控件开发

前言今天总结一下Android开发中的自定义控件的开发,Android中所有控件和布局的基类都是View,自定义控件也就是继承View或者View的派生类,然后再重写类中的内部方法。通常来说自定义控件分为三种:1.自定义View:继承View2.基于现有组件:继承View的派生类3.组合的方式:自定义控件中包含了其他的组件下图体现了各种控件的继承关系:Vi...

2018-08-13 21:15:18 135

原创 Gradle-命令笔记

用来分析依赖包的结构:apply plugin: 'project-report'gradle htmlDependencyReportopen app/build/reports/project/dependencies/index.html查看所有任务./gradlew tasks --all对某个module [moduleName] 的某个任务[TaskName...

2018-05-23 21:34:36 136

原创 Git-gitignore文件的添加

说明:.gitignore文件是使用git版本控制器时,在本地仓库的工作空间下的一个配置文件,顾名思义,在这个文件声明的文件,当这些文件发生改动时,git追踪器不会提醒我们这些改动。好处:拿Android开发为例,开发时,我们通常只对app下一些文件做了改动或者说我们只关注这些改动,而编译器自动产生的一些配置文件和编译时产生的文件我们是不需要commit的,如果没有设置.git...

2018-05-23 21:33:54 217

原创 Git-常用基本操作整理

Git用的不是很熟,整理一篇文章方便以后查阅。按照使用步骤:创建新仓库创建新文件夹,打开终端,执行:git init就创建了一个git仓库检出仓库创建一个本地仓库的克隆版本,执行:git clone /path/to/repository如果远程服务器的仓库,执行:git clone username@host:/path/to/repository工作流分...

2018-05-23 21:33:41 106

原创 微信小程序-开发实战

前言最近两个月在研究微信小程序(以下简称小程序)开发,开发方式历经原生小程序开发—>wepy框架开发—>mpvue框架开发。wepy和mpvue的结构类似vue,通过“编译”将代码转换成小程序原生语言,使得开发者以前端开发的模式来开发小程序。推荐开发方式:先体验原生开发,学习主要参考的资料是微信官网文档,了解原生开发的模式和相关组件的属性以及可用API,再使用框...

2018-05-23 21:32:54 163

原创 React Native-原生模块开发

前言:所谓原生模块开发,很重要的就是Android/iOS原生代码和ReactNative代码的交互,以及在ReactNative代码中使用原生的组件。下面将从这两个地方开始讲解(示例以Android平台为基础):先回顾一下RN组件的生命周期:constructor():在组件被加载前最先调用,第一个语句必须是super(props)。componentWillMount...

2018-05-23 21:31:55 418

原创 React Native-Flexbox布局使用总结

前言:最近在学习RN(React Native),一开始被他的跨平台和热更新的特性所吸引,在Android和iOS平台上90%的代码可以通用,出现问题后重新发布离线包即可动态修复。RN使用flexbox模型布局,下面讲讲我在使用flexbox布局的一些总结。1. 容器、主轴和交叉轴是什么?(此处参考阮一峰老师的文章)flexbox(弹性盒)是W3C提出的UI设计模型规范的一种...

2018-05-23 21:31:41 162

原创 Java-几种内部类

Java内部类分4中:成员内部类、局部内部类、静态内部类、匿名内部类。1、成员内部类:即作为外部类的一个成员存在,与外部类的属性、方法并列。注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。成员内部类的优点:⑴内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)⑵用内部类定义在外...

2018-05-23 21:30:37 107

原创 Java-关于对象池的创建问题和多线程调用对象池对象发生阻塞的测试

关于对象池,形象地说就是事先创建好了一些某类型的对象放在对象池中。当程序(线程)需要使用这种对象的时候,直接从对象池中获取该对象。然而也有很多问题需要注意,一些不容忽视的问题就是:1.原子操作的问题,共享资源区是不能同时访问的,所以使用synchronized来并发防止访问错误。2.线程阻塞问题,当对象池中对象全部在使用中,已经没有空闲对象,然而此时又有一个线程向对象池申请对...

2018-05-23 21:30:15 342 1

原创 Android-JsBridge通行机制总结

前言最近在研究JsBridge的运行机制,在学习这个框架之前,首先需要了解H5与原生之前的通信方式。下面以Android平台为例:Js调用原生(Java)总的来说有四种方式:1.JavascriptInterface2.WebViewClient.shouldOverriderUrlLoading()3.WebViewClient.onConsoleMessage()...

2018-05-23 21:29:36 159

原创 Android-获取View宽高的时机

前言:最近遇到一个bug,问题描述是这样的:启动页需要放置一张广告图,要使这张图在不变形的情况下(等比例缩放),宽度要占满屏幕宽,于是手动计算并设置ImageView需要的缩放比例来对图片进行缩放。该方法触发的时机引发了一些问题。private void scaleView(ImageView iv) { if (iv.getDrawable() == null...

2018-05-23 21:29:09 279

原创 Android-欢迎页联动动画设计

前言:博客还是要坚持写的,之前弄过一个欢迎页的联动效果,不是很复杂,其中包括两个点:一个是ViewPager滑动时两层布局的错位效果,另一个页面中View在滑动时的渐隐渐现效果。以下是我的设计思路:1.将A,B两个ViewPager放置于同一布局中,屏蔽掉B的内部点击事件,给A设置OnPageChangeListener,在A的监听方法中调用B的scrollTo使B一起滑动,此...

2018-05-23 21:28:48 238

原创 Android-Freeline的集成

前言:为了最大程度的提高Android开发效率,除了通过gradle配置加快构建速度以外,还可以使用其他编译方案,听说Freeline还不错,比instant-run和LayoutCast都要快,而且维护得越来越好,就打算试一试,Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,具体原理说明参见官方说...

2018-05-23 21:28:36 207

原创 Android-自定义View之双指连续拖动弹性布局

前言很久没有写博客了,今天决定把这个习惯找回来,毕竟自己总结的东西如果不整理记录下来,过段时间就会忘记。前几天发现ios系统的滚动布局可以支持双指连续下拉/上拉的操作,Android系统提供的控件没有实现这样的效果,决定自己写一个。实现思路因为需要定制了一个可以上拉/下拉,松手后回弹效果的ScrollView(当然也可以是其他Layout),跟常用的下拉刷新的控件的实现原理类...

2018-05-23 21:26:43 211

原创 Android-异步操作更新UI界面的几种方法

在Android开发中,耗时操作是比较多的,更新ui需要在主线程中,然而耗时操作是不能放在主UI线程中在执行的,因为这样会使我们的主UI界面不流畅甚至严重卡顿,所以需要使用异步操作来做更新UI界面的操作,方法的实质就是将耗时操作放到一个新的线程中来执行,并在必要时通知UI线程做出更新的动作。最常有的有四种方法:1.HandlerHandler handler= new Han...

2018-05-23 21:26:11 551

原创 Android-fastboot简介与基本用法

1.Fastboot简介(参考资料:http://www.omappedia.org/wiki/Android_Fastboot#Updating_system_image_on_NAND)Fastboot是Android快速升级的一种方法,Fastboot的协议fastboot_protocol.txt在源码目录./bootable/bootloader/legacy下可以找...

2018-05-23 21:25:49 430

原创 Android-用apktool工具进行拆包、重打包

准备工作:一、拆包。(Mac环境)1.下载apktool,我用的是apktool_2.1.1.jar。2.需要拆包的apk。用到的命令:解包:java -jar apktool_2.1.1.jar d app-test.apk打包:java -jar apktool_2.1.1.jar b app-test/签名:jarsigner -verbose -keys...

2018-05-23 21:25:17 4094

原创 Android-ubuntu系统下开发环境搭建

一、jdk环境配置1.打开Oracle网站下载jdk7选择Linux的版本,如果操作系统是32位就选择x86,64位就选择x64。我们选择jdk-7u80-linux-x64.tar.gz2.打开Terminal。我么指定安装目录:/usr/local/java。首先在/usr/local下创建一个java文件夹。cd /usr/localsudo mkdir jav...

2018-05-23 21:24:17 102

原创 Android-apk反编译方法

下面主要说明一下反编译一个apk的步骤(Mac上操作):准备工具:1.dex2jar:https://github.com/pxb1988/dex2jar2.jdgui:http://jd.benow.ca/3.android-apktool:https://ibotpeaches.github.io/Apktool/一、查看源代码。将准备反编译的apk的后缀由....

2018-05-23 21:23:37 160

原创 Android-Annotations的使用

AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”。下面简单讲一下Annotation的基本用法(以AndroidStudio为例):一、新建项目,在gradle里添加配置。...

2018-05-23 21:23:07 182

原创 Android-三种数据储存方式

整理一下Android开发中的三种基本的数据储存方式,分别是:文件、SharedPreferences、SQLite。一.文件。利用Java中的文件输入、输出操作就可以实现,值得注意的是文件存放的路径,内部储存有权限限制,而外部存储一般可以直接进行增删改查操作。二.SharedPreferences。这是Android自己提供的一个数据储存方式,简单操作就可以实现快速的数据...

2018-05-23 21:22:44 762

原创 Android-Accessibility(辅助功能)

最近开发用到了辅助功能,赶紧整理下来。先介绍一下Accessibility:对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示...

2018-05-23 21:22:05 485

原创 Android-方向传感器(制作指南针)

方向传感器(制作指南针)Android中的方向传感器可以准确的判断出手机在各个方向的旋转角度,利用这些角度就可以编写出像指南针、地平仪等有用的工具。下面,我来制作一个简单指南针。先附上代码:Activity:public class MainActivity extends AppCompatActivity implements SensorEventListener{p...

2018-05-23 21:21:29 469

原创 Android-Volley的基本用法

关于volley的介绍不说了,直接讨论一下volley的几种用法。1.将volley的库导入到自己的工程。(记得开启工程的网络权限)image2.初始化请求池。在application实例一个RequestQueue单例,并提供一个get方法来获取。image3.网络请求有三种常见请求类型:StringRequest、ImageRequest...

2018-05-23 21:20:54 180

原创 Android-Fragment的基本用法

今天来探讨一下Fragment的基本用法,先来认识一下Fragment:什么是Fragment?Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解...

2018-05-23 21:20:12 463

原创 Android-BroadcastReceiver的两种注册方式

android里的广播组件主要是两部分:发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action(指定对应的广播接收器)。接收广播:广播接收器设置一个intentFilter来接受相应的广播,当发送的广播被接收器监听到后,会调用onReceive()方法,并将包含消息的Intent对象传回。注册广播主要有两种方法:静态注...

2018-05-23 21:03:45 423

原创 Android-Service的基本用法

Service是Android四大组件之一,也是可执行的程序,有自己的生命周期。创建、配置Service和创建、配置Activity的过程相似。和Activity一样,都是从Context派生出来的。 ---《疯狂android讲义(第二版)》就本地Service而言,通常有两种启动模式:start 和 bind。一、start方式启动Service使用Service的步骤:...

2018-05-23 21:02:58 204

原创 Android-Activity的启动模式

通常在实际项目中我们应该根据特定的需求为每个活动指定合适的启动模式。启动模式一共有四种,分别是standard、singleTop、singleTask、singleInstance。可以在AndroidManifest.xml中通过给<activity>标签指定android:laumchMode属性来选择启动模式。下面我将逐个介绍。1. standardst...

2018-05-23 20:54:22 76

原创 Android-布局优化问题

在进行Android应用开发时,界面优化问题至关重要,它严重影响了应用的加载效率,我简单谈论一下Android开发中UI界面的优化问题。添加到应用中的每一个布局和控件都需要经过初始化、排列位置、绘制三个过程。通常遇到的问题:比如说,使用嵌套的线性布局可能导致你的布局层级变得十分冗余。此外,如果在嵌套的线性布局中使用了 layout_weight 参数的话,那么他的每一个子 vi...

2018-05-23 20:38:29 71

原创 Android之ListView的使用(一)

在Android开发中,ListView可以说是最常见的控件之一,几乎所有的应用程序都会用到它,ListView可以说是最常见的控件之一,由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助ListView来实现。         先说一下ListView的简单用法:创建一个ListViewTest项目,修改activity_

2016-06-06 16:56:23 345

原创 Java的几种内部类

Java内部类分4中:成员内部类、局部内部类、静态内部类、匿名内部类。 1、成员内部类:即作为外部类的一个成员存在,与外部类的属性、方法并列。注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。 成员内部类的优点:⑴内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)⑵用内部类定

2016-06-01 16:46:06 607

原创 Android布局优化问题

在进行Android应用开发时,界面优化问题至关重要,它严重影响了应用的加载效率,今天我简单谈论一下Android开发中UI界面的优化问题。添加到应用中的每一个布局和控件都需要经过初始化、排列位置、绘制三个过程。通常遇到的问题:比如说,使用嵌套的线性布局可能导致你的布局层级变得十分冗余。此外,如果在嵌套的线性布局中使用了 layout_weight 参数的话,那么他的每一个

2016-05-30 12:29:05 415

原创 Java-关于对象池的创建问题和多线程调用对象池对象发生阻塞的测试

一直在学习!

2015-07-08 09:32:06 326

空空如也

空空如也

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

TA关注的人

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