自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (2)
  • 收藏
  • 关注

原创 MultiDex.install源码解析(伪代码)

MultiDex.install源码解析(伪代码)dexOpt操作是发生在哪里?public static void install(Context context) { List dexPathList = null; // 4.4以上系统直接返回 if(systemVersion > 4.4){ return; }else{ //创建/data/data/包名/code_cache/secondary-dexes目录

2021-08-17 17:39:44 361 2

原创 pub did not create .dart_tools/package_config.json file

pub did not create .dart_tools/package_config.json file出现这个现象一般是flutter pub命令出现了问题,我这边是由于为了绕过google账号验证使用新的pub.snapshot出现的这个问题,替换为原生版本的pub就可以了。...

2020-10-27 17:56:27 1652

原创 flutter 插件私服搭建

flutter 插件私服搭建1 目的搭建私服的目的是上传自己的flutter插件提供给其他开发者下载使用。基于网上的教程,发现很多步骤因为版本迭代命令都不一样了,最后经过摸索终于把私服搭建起来并成功上传了插件,以下是搭建私服的步骤。2 如何搭建。(1)pub_server安装及启动。pub_server类似于maven仓库一样可以存储flutter插件。pub_server下载仓库为https://pub.dev/packages/pub_server按照官网步骤启动pub_server即可

2020-10-27 13:52:17 744

原创 flutter message channel原理

flutter message channel原理最近在学习flutter插件,对flutter ui层与native层的通信机制进行了了解,记录下对message channel通信机制的理解。1 为什么要使用message channel?如果app只涉及到ui渲染以及http请求的话,只使用flutter的ui 框架和http请求框架就可以了,但当需要使用到一些native原生技术支撑的使用,使用flutter ui框架无法直接调用系统提供的原生接口,这个时候就需要使用flutter的插件来为f

2020-10-26 10:45:28 865

原创 flutter PlatFormView for webView

flutter PlatFormView for webView1 flutter platformView是 flutter 在flutter ui无法满足ui需求时,使用native 原生的ui渲染。2 下面是一个是在flutter中使用android webview的例子。webView.dartimport 'package:flutter/cupertino.dart';import 'package:flutter/foundation.dart';import 'package:f

2020-10-23 16:23:16 376

原创 Flutter plugin Exception in thread “main“ java.util.zip.ZipException: error in opening zip file

Flutter plugin Exception in thread “main” java.util.zip.ZipException: error in opening zip file在创建flutter plugin 完成之后启动工程的时候发现感觉应该是gradle版本没有找到,结果就一直在改android工程下的gradle,后来发现应该修改example下面的gradle版本,修改后正常运行,还是对flutter插件的架构不是很了解才会出现这种错误。...

2020-10-13 17:43:08 4511 2

原创 flutter常用组件(一)

flutter常用组件(一)1 容器组件//container组件class MyApp extends StatelessWidget{ @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( title: "容器组件测试", color: Colors.blue, home: Scaffold(

2020-10-12 11:14:24 521 1

原创 android屏幕适配的理解

android屏幕适配的理解经常在开发中被dp、px搞的很头大,就理了下android适配。首先要理解android屏幕适配在做什么,就是在不同的手机上看到的ui效果是一致的。我觉的,不管是什么适配方案,最终都要归结于px,为什么,因为屏幕就认识px啊,他不认dp,对于屏幕而言,你的程序只要告诉我你要渲染的内容宽是多少像素、高是多少像素。但是,如何用一套代码在不同分辨率的手机上显示相同效果呢?要达到这个目的,就需要在代码中告诉手机在不同的分辨率手机上应该渲染几个像素。方案一:于是,最直接的方案就

2020-10-09 17:28:28 165

原创 windows 批处理脚本批量push文件

windows 批处理脚本批量push文件最近在将app预制到系统目录下面的时候发现so过多,每次push很麻烦,就写了一个批处理脚本批量push so,记录下,先上批处理代码。@echo offsetlocal enabledelayedexpansionset work_path=C:\Users\zhangchao\Desktop\appcd %work_path% for /r %%s in (*.apk) do ( rem echo %%s set tempPath=%%s

2020-10-09 11:56:15 1699

原创 flutter路由

flutter 路由实践实践工程中的总结:1 flutter的路由有点类似于android的activity路由,在android中,activity的跳转需要在manifest.xml文件中注册才可以使用,flutter需要将widget(最好是Scaffold,Scaffold类似于android的activity)返回给router来进行路由。2 dart创建对象可以直接调用类的构造函数创建,类似于:void main() { //runApp(MyApp()); runApp(new

2020-09-30 11:21:11 594

原创 flutter hello world源码解析

flutter hello world源码解析在android studio 配置flutter工程后,主工程代码如下。import 'package:flutter/material.dart';void main() { runApp(MyApp());}class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(Bu

2020-09-29 19:37:29 133

原创 android gradle settings读取Properties与local.propertues不一致问题

android gradle settings读取Properties与local.propertues不一致问题在使用local.propertues设置模块加载时,发现设置为true,但是gradle没有加载相对应的模块# settings.gradle Properties properties = new Properties() File propertyFile = new File(rootDir.getAbsolutePath() + "/local.properties

2020-08-13 16:59:09 1348 1

原创 android gradle版本无法下载

android gradle版本无法下载问题解决方法在引入一个新的android项目的时候,通常会因为无法下载gradle版本而一直卡在同步界面,类似于下面的情况。这是因为gradle运行时首先会检查distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-all.zip对应的gradle版本有没有下载到本地,有的话则使用该版本的gradle,没有的话则去下载。而https://services.gradle.org/

2020-08-13 16:49:20 829

原创 android TV ImageView选中控件

android TV ImageView选中控件在android TV开发的时候,经常会遇到图片选中的情况,产品定义的选中效果一般有以下三种效果:1 圆角2 选中发光3 尺寸放大有三种方案供选择:方案一:UI提供圆角不发光图片、圆角发光图片,通过设置background 为StateListDrawable来选择不同状态的图片。优点:集成速度快,方式简单。缺点:每一个imageView切换状态的时候都要加载新的图片到内存,占用内存空间以及包体积。ui给的发光图片在分辨率较大的电视上容易产生

2020-08-06 17:23:20 771

原创 android 5.0以下系统首次启动黑屏问题

android 5.0以下系统首次启动黑屏问题最近在android 机顶盒上发现app首次运行的时候启动黑屏,看日志发现是 MultiDex.install(this)在4.4系统上首次安装时合并dex和进行dexOpt操作导致。整个操作大概耗时15s,下面通过源码分析下原因。首先在4.4的系统上,安装app后系统做了点什么事呢?1更新PMS的版本信息,以方便系统对app进行管理。2 在app对应的目录下面创建目录以及将dex文件和资源文件复制到相应的位置。通过adb shell我们看下。在da

2020-07-28 13:05:11 617

原创 Java阻塞队列之LinkedBlockingQueue分析

Java阻塞队列之LinkedBlockingQueue分析LinkedBlockingQueue的实现其实跟ArrayBlockingQueue差不多,只是一个内部存储是数组,一个是链表。 /** Current number of elements */ //数据个数不同线程间的同步,可以看前面的文章对AtomicInteger的解释。 private final AtomicInteger count = new AtomicInteger(); /** * Hea

2020-07-24 15:24:31 126

原创 Java voliate和AtomicInteger的简单理解

Java voliate和AtomicInteger的简单理解经常在源代码中看到voliate和AtomicInteger,然后上网会搜出一大堆的特性,看了别人的分析介绍后,大概总结了下voliate和AtomicInteger的原理,记录一下。首先我们比较熟悉的java内存模型。java为什么要定义内存模型呢?是为了让程序员能够专注于程序本身,而屏蔽掉了具体硬件与系统的交互细节实现。其实,主内存就是我们加载程序,放置对象的内存,也是硬件里面的内存,而工作内存,就是CPU的寄存器,一级缓存、二级缓存

2020-07-24 14:50:55 432

原创 阻塞队列之ArrayBlockingQueue源码分析

常用阻塞队列源码分析什么是阻塞队列?阻塞队列就是一个容器,该容器提供了俩个能力。1 存储和读取数据对象。2 当存储数据对象时容器已满,就阻塞当前线程,直到有新的数据添加到容器时该线程才继续执行。同理,取数据也是一样。那么阻塞队列最常用的就是存储数据和获取数据的几个方法。下面结合几个方法来查看几种常见的阻塞队列的源码。1 ArrayBlockingQueue final Object[] items; /** items index for next take, poll, peek

2020-07-23 12:57:25 101

原创 java 生产者与消费者的几种实现方式

java 生产者与消费者的几种实现方式1 synchronized的方式public class MyClass { public static void main(String[] args){ final DataAssemble dataAssemble = new DataAssemble(); for(int i = 0; i < 20; i ++){ Thread thread = new Thread(new Run

2020-07-20 15:52:48 170

转载 Android ART、Dalvik在multidex上的差异、关联

Android ART、Dalvik在multidex上的差异、关联文章转载自:https://www.cnblogs.com/tonybright/p/8907220.htmlmultidex由分包、合包两个过程组成,分包均是通过andriod build tool来做的,两者存在一个很重要的差异点:android 5.0及以上手机在安装apk时,手机设备中的dex2oat工具会将dex1~dexN读取合成为一个oat文件, 供art使用。dex2oat的过程是不区分主dex、辅助dex的,这样在

2020-07-20 12:25:03 130

原创 关于synchronized和ReentrantLock的理解

关于synchronized和ReentrantLock的理解作为俩个同步锁,synchronized的实现是在jvm,我们不需要手动去释放锁,jvm会替我们做好,原理大概是:jvm在执行到有synchronized关键字的方法的时候,会判断synchronized指向的对象锁里有没有锁定某一个线程,如果没有则锁定,有的话,会把该线程阻塞,并把该线程添加到等待队列,等到锁定线程执行完之后,随机选一个等待队列里的线程执行(因为有的线程很早就添加到等待队列里面了,所以随机选择对他们来说是不公平的,因此是不公平

2020-07-16 16:24:02 166

转载 synchronized的底层实现原理

synchronized的底层实现原理转载自https://baijiahao.baidu.com/s?id=1612142459503895416&wfr=spider&for=pc,记录下别人分析的结果。synchronized锁的底层实现MDove:我们都知道,对象被创建在堆中。并且对象在内存中的存储布局方式可以分为3块区域:对象头、实例数据、对齐填充。其中对象头,便是我们今天的主角。关于实例数据、对齐填充的作用,各位小伙伴可以参考《深入理解Java虚拟机》。MDove:对

2020-07-16 12:29:47 1767

原创 debug Android gradle源码

以debug的方式查看Android gradle插件源码思路:编写gradle插件,是插件继承自android gradle 插件,然后debug调试查看android gradle 插件源码。步骤如下:1 新建myPlugin模块。2 删除myPlugin模块下 main文件夹下的所有文件,修改build.gradle的内容为:apply plugin: 'groovy'apply plugin: 'maven'dependencies { //gradle sdk co

2020-07-15 17:12:57 325

原创 Android gradle 初探

Android gradle 初探(一)首先,gradle是什么,gradle是一个构建工具,那么什么是构建工具呢?我们在开发app是只是输入了java代码和图片等资源,只要点击运行就可以在手机上跑起来这个app,在build目录下可以看到,我们的java代码和图片资源被打包成了一个app文件(app文件有点像zip文件,是一系列文件的集合),那么问题来了,这个app是如何产生的呢?google官方告诉了我们这个app是如何产生的。这一系列的操作,包括编译java代码,编译资源文件,签名、混淆等等都是

2020-07-14 17:12:49 135

原创 HandlerThread和IntentService源码解析

HandlerThread和IntentService源码解析/** * A {@link Thread} that has a {@link Looper}. * The {@link Looper} can then be used to create {@link Handler}s. * <p> * Note that just like with a regular {@link Thread}, {@link #start()} must still be called.

2020-07-10 14:40:51 139

原创 android handler的理解

android handler的理解在看handler源码前,我一直以为google构造handler的目的是方便开发者在其他线程中调用执行主线程的方法或者在主线程中调用执行其他线程的方法。看完源码后我发现,原来整个app就是在handler机制下运行的,可以说handler是整个app的消息架构,很重要。我们平常使用最多的就是使用handler 的new Handler().postDelayed() 和new Handler().sendMessage()的方法,我们直接看new Handler

2020-07-10 10:14:57 294

原创 ThreadLocal的理解

ThreadLocal的理解以前了解过threadLocal,只是知道它可以让开发者在不同的线程中对同一个对象做备份,但是从来没有使用过,理解的也不是很深,接下来准备研究下android Handler的源码,发现网上的博客有的先介绍了ThreadLocal,看了一会就自己去看源代码了,我认为看源代码虽然慢,但是会让人理解的透彻,所以看博客的正确打开方式是:看别人的总结和分析(毕竟是巨人的肩膀),然后自己再看源代码撸一遍,这样会有自己的理解。好了,开始分析源码吧。首先看ThreadLocal这个类。/

2020-07-09 14:44:47 157

原创 Android 事件传递机制的理解

最近研究了下Android 的事件传递机制,觉得有必要记录下,以免忘记。 站在app研发的角度来看android ,开发者主要做俩个事。 1是渲染希望用户看到的界面; 2是响应用户的操作。可见,事件传递机制是多么的重要。 我们常见的android事件传递机制主要有motionEvent和keyEvent,下面我们直接分析俩个事件 的源码。分析源码的过程中也看了很多大牛的博客分析源码,结合自己的demo测试,记录下。 先分析touchEvent。 Androi...

2020-07-07 18:48:34 1597

RoundStrokeImageView.txt

android tv imageview ,支持圆角、选中后发光、选中后拉伸的功能,可以通过设置来自定义需要的能力。

2020-08-06

gradleCsdn.zip

Android gradle插件源码调试工程,可以直接通过debug的方式查看android gradle 插件的源代码。

2020-07-15

空空如也

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

TA关注的人

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