Android 高级
文章平均质量分 73
赵健zj
致力于移动端(Android/IOS/Flutter/C++/音视频)生态的学习
展开
-
使用Excel和翻译api批量翻译字符串
应用程序传送门注册APP_IDhttps://translate.google.com/translate_a/single?client=gtx&sl=en&tl=ms&dt=t&q=%48%65%6c%6c%6f%20%57%6f%72%6c%64原创 2023-03-07 14:02:57 · 262 阅读 · 0 评论 -
android国际化Excel和string.xml互转
国际化字符串是一个非常复杂费力又不讨好的工作。原创 2023-03-06 19:51:25 · 1151 阅读 · 1 评论 -
InputMethodService声明周期
InputMethodService生命周期介绍原创 2022-10-09 18:21:01 · 542 阅读 · 0 评论 -
android-10.0.0_r1安卓系统内置第三方app
安卓源码内置第三方app原创 2022-08-27 23:54:03 · 1172 阅读 · 0 评论 -
TaskDispatcher源码解析
TaskDispatcher原创 2022-07-28 18:34:17 · 339 阅读 · 0 评论 -
AsyncTask源码解析
Async源码分析原创 2022-07-08 12:41:04 · 360 阅读 · 0 评论 -
ExpandableListView源码解析
ExpandableListView原创 2022-07-06 14:01:19 · 674 阅读 · 0 评论 -
ListView源码解析
ListView源码解析原创 2022-07-06 12:55:36 · 1383 阅读 · 0 评论 -
我在纵横的面试总结
ViewPager嵌套ViewPager滑动冲突的解决总结 * 1。点下的时候,要记录下手指按下的位置 * 2。滑动的时候,通过滑动的距离,判断是往哪个方向滑动 * 3。左滑的时候,到末尾不拦截,false;不到末尾拦截,true * 右滑的时候,到开头不拦截,false;不到开头拦截,false * 4. getParent().requestDisallowInterceptTouchEvent(disallowIntercept);的作用就是给 * 给ViewG原创 2022-04-06 00:20:45 · 2255 阅读 · 0 评论 -
KOOM原理分析之二KOOM
文章目录资料KOOM的总体架构koom-demokoom-java-leakkoom-native-leakkoom-koom-thread-leakkoom-monitor-basekwai-android-basekwai-unwindsharkxhook分解步骤引起泄漏的地方注册开启循环startLoopForkJvmHeapDumper中的dump资料github/KOOM快手客户端稳定性体系建设Android 中看似高大上的字节码修改,这样学就对了!KOOM的总体架构koom-dem原创 2022-03-30 11:37:29 · 1706 阅读 · 0 评论 -
OkHttp源码解析
OkHttp源码解析资料OkHttp源码深度解析OkHttp源码走心解析(很细 很长)整体结果拦截器(责任链模式)RetryAndFollowUpInterceptor – 失败和重定向拦截器BridgeInterceptor – 封装request和response拦截器CacheInterceptor – 缓存相关的过滤器,负责读取缓存直接返回、更新缓存ConnectInterceptor – 连接服务,负责和服务器建立连接 这才是真正的请求网络CallServerInterc原创 2022-03-28 15:26:22 · 2369 阅读 · 0 评论 -
自定义Router
自定义Router资源目录router-annotations这是一个java项目,主要是为了定义一个注解Destinationrouter-processor使用AutoService功能,来处理生成的json文件router-runtimeRouter用于原创 2022-03-28 10:58:31 · 2464 阅读 · 0 评论 -
KOOM原理分析之一些基础知识
内存泄漏使用的一些工具,Profiler,HPROF文件格式等基础信息原创 2021-12-01 16:31:04 · 1968 阅读 · 0 评论 -
HotSpot虚拟机的学习
资源jvm虚拟机模型对象的创建当虚拟机遇到一条字节码的new命令时,首先将区检查这个指令是否以及在常量池中,可以定位到一个类的符号引用,并且检查引用的类是否被加载、解析与初始化过。如果没有,就将执行相应的类加载过程。类检查通过后将进行给新生的对象分配内存,内存的大小在的加载后就可以确定。就是将一块确定大小的内存从java堆中划分出来。采用指针碰撞的方式。解决对线程创建在并发情况下的线程安全,通过这两个方法(1)对分配的内存空间动作进行同步处理–实际上虚拟机采用的是CAS配上失败重试的方式原创 2021-11-08 09:27:36 · 152 阅读 · 0 评论 -
安卓中的theme和style
资料Android中Theme主题和Style样式使用介绍总结样式和主题背景Android styling: themes vs stylesAndroid styling: common theme attributesAndroid styling: common theme attributesAndroid Styling: prefer theme attributes原创 2021-10-12 11:01:11 · 142 阅读 · 0 评论 -
安卓多语言国际化
Storagepackage com.joyy.languagesimport android.content.Contextimport java.util.*/** * Time:2021/9/16 15:33 * Author: flannery * Description: */interface Storage { fun save(ctx: Context, local: Locale) fun get(ctx: Context): Locale .原创 2021-09-16 16:45:06 · 306 阅读 · 0 评论 -
Android之Plugin插件的开发
资料Android Gradle Plugin插件开发——基础Android Gradle Plugin插件开发——进阶Android Studio Plugin 插件开发教程(一) —— 开发你的第一个插件Android Studio Plugin 插件开发教程(二) —— 插件SDK中的常用对象介绍Android Studio Plugin 插件开发教程(三) —— 制作一个自动生成数据库代码的插件Android Studio Plugin 插件开发教程(四) —— 为自动生成数据库代码的插原创 2021-09-07 11:24:02 · 2456 阅读 · 0 评论 -
mac下编译安卓源码
资源Mac OS10.12 编译Android源码8.1aosp编译-需翻墙原创 2020-12-05 10:43:37 · 1945 阅读 · 0 评论 -
仿照探探卡片滑动
SlideCardLayoutManagerpackage com.enjoy.leo_slidecard;import android.view.View;import android.view.ViewGroup;import androidx.recyclerview.widget.RecyclerView;public class SlideCardLayoutManager extends RecyclerView.LayoutManager { @Override原创 2020-07-28 22:44:14 · 437 阅读 · 0 评论 -
ScaleGestureDetector
// 用于处理缩放的工具类,用法与GestureDetector类似,都是通过onTouchEvent关联相应的MotionEvent。// 使用该类时,用户需要拆入一个完整的连续不断的motion事件(包含ACTION_DOWN,ACTION_MOVE和ACTION_UP事件)final ScaleGestureDetector scaleGestureDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.原创 2020-07-17 16:43:24 · 1090 阅读 · 0 评论 -
GestureDetector
final String TAG = "TAGTAGTAG";final GestureDetector gestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() { // 步骤1。 用户触摸屏幕 @Override public boolean onDown(MotionEvent e) { Log.i(TAG, "原创 2020-07-17 15:56:43 · 169 阅读 · 0 评论 -
FlowLayout
package com.xiangxue.nestedscroll.flowlayoutimport android.content.Contextimport android.content.res.Resourcesimport android.util.AttributeSetimport android.util.TypedValueimport android.view.Viewimport android.view.ViewGroupimport kotlin.math.max原创 2020-07-16 16:58:59 · 159 阅读 · 0 评论 -
模仿京东-上下左右滑动冲突
项目Conflict_project图片实例解决几个冲突上面RecyclerView的高度扩宽头部和下面ViewPager的同时滑动头部隐藏后,ViewPager中RecyclerView继续滑动解决步骤1. 扩宽头部RecyclerView布局加入这个,自适应高度android:layout_width="match_parent"android:layout_height="wrap_content" 2. 解决冲突public class NestedScrollL原创 2020-07-16 11:37:21 · 558 阅读 · 0 评论 -
View的尺寸测量SpecMode&MeasureSpec
View地绘制流程自定义绘制流程我们都是知道Androdi的视图数在创建时回掉用视图的measure、layout、draw三个函数,分别对应尺寸测量、视图布局、绘制内容。但是,对于非ViewGroup类型来说,layout这个步骤不需要的,因为它并不是一个视图容器。它需要做的工作只是测量尺寸与绘制自身内容,上述SimpleImageview就是这样的例子。但是,SImpleImageView的尺寸测量只能根据图片的大小进行设置,如果用户像支持需要根据用户设置的宽高模式来计算SimpleImage原创 2020-07-04 23:58:22 · 869 阅读 · 0 评论 -
Scroller的使用
自定义ViewGroup自定义ViewGroup是另外一种重要的自定义View形式,当我们需要自定义子视图的排列方式时,通常下幼通过这种形式实现。例如,最常用的下拉刷新组件,实现下拉刷新、上拉加载跟他更多的原理就是自定义了一个ViewGroup,将HeaderView、ContentView、FooterView从上到下依次布局,如图2-16所示(红色区域为屏幕的显示区域运行时可看到色彩)。然后再初始时通过Scroller滚动使用该组件在y轴上滚动HeaderView的高度,这样当以来该ViewGroup原创 2020-07-04 20:42:35 · 532 阅读 · 0 评论 -
自定义View-基础知识-各种关于Paint和Canvas的小总结
资料来源来自AigeStudiohttps://blog.csdn.net/aigestudioPaint资料https://blog.csdn.net/harvic880925/article/details/51010839Paint.Styleprivate fun drawStyle(canvas: Canvas?) { val mPaintFor1: Paint = Paint() val mPaintFor2: Paint = Paint() val mPai原创 2020-06-21 19:29:18 · 508 阅读 · 0 评论 -
android 中 使用style app开头的属性
<style name="MBase.WBTrace.CardView_Image" parent="android:Widget"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="androi...原创 2020-06-15 14:54:59 · 1611 阅读 · 0 评论 -
JVM常见面试题&JVM虚拟机上课总结
来源运行时数据区域JVM 内存主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。程序计数器较小的内存空间,当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响。程序计数器是一块儿很小的内存空间,主要用来记录各个线程执行的字节码的地址,例如分支、循环、跳转、异常、线程恢复等都依赖于计数器。由于java是多线程语言,当执行的线程数量超过CPU核数时,线程之间会根据事件片轮询争夺CPU资源。如果一个线程的时间片用完了,或者是其它原因导致这个线程的CPU资源被提前抢夺,那么这个退出的线程原创 2020-06-13 23:49:12 · 312 阅读 · 0 评论 -
Android加固
来源享学堂主函数import java.io.File;import java.io.FileFilter;import java.io.FileOutputStream;import java.io.FilenameFilter;public class MyMain { public static void main(String[] args) throws Exception { byte[] mainDexData; //存储源apk中的源dex文原创 2020-06-10 22:23:54 · 796 阅读 · 0 评论 -
升级友盟导致Databinding找不到
升级友盟导致Databinding找不到这个很坑,我是从友盟6.9.4升级到7.0.2 导致databinding找不到错误解决办法这个问题折腾了好久:几个思路:以为是7.0.2升级版本里面方法改了,但是我把友盟代码全部去掉,再重新接入,是可以分享的。jar可能不实用了,我就用了build.gradle方法。发现还不行可能是项目引入的地方太多,更新jar, AS不能及时处理。最后,我打算自己新建一个方法类,专门友盟的管理。除了这个地方引用,其他地方都不引用友盟。注意:我把统计的代码原创 2020-06-10 16:05:07 · 571 阅读 · 0 评论 -
(讲课篇)让小白都能明白的Android开发-2. 跨入Android大门的Kotlin语言篇
大家好,我叫赵健,目前是一名Android开发工程师。今天开始我们一起步入Android开发的世界。本系列课程一共分为6节课,分别讲解了从事Android开发从知道到实际应用几个难点。本系列课程主要有以下几部分:快速创建一个安卓应用以及基本UI的掌握跨入Android大门的Kotlin语言篇所有的动画都来源于这些操作自定义UI及一些概念快速接入第三方应用分析一下优秀的开源程序上节...原创 2020-04-11 16:59:06 · 444 阅读 · 0 评论 -
(讲课篇)让小白都能明白的Android开发-1. 快速的创建一个安卓应用及基本的UI
大家好,我叫赵健,目前是一名Android开发工程师。今天开始我们一起步入Android开发的时间。本系列课程一共分为6节课,分别讲解了从事Android开发从知道到实际应用几个难点。本系列课程主要有以下几部分:快速创建一个安卓应用以及基本UI的掌握跨入Android大门的Kotlin语言篇所有的动画都来源于这些操作自定义UI及一些概念快速接入第三方应用分析一下优秀的开源程序那么...原创 2020-03-15 17:27:57 · 797 阅读 · 0 评论 -
Flannery基础仓库的搭建
思考如何搭建一个快速开发的基础仓库我的私有mavenhttps://dl.bintray.com/adrianandroid/mavencommonlib基础仓库commonlib说明:基本工具类的仓库用法implementation ‘com.istarshine.common:common:3.0.5’FilterLibrary基础仓库AdrianAndroid/Filter...原创 2020-02-25 08:30:17 · 248 阅读 · 0 评论 -
记录一下修改网评OEM代理商的问题
网评代理商注意事项根据本次修改网评代理商出现的问题做记录说明:1.只修改了a)1.图标b)2.微信keyc)3.微博keyd)4.启动页e)5.登录f)6.升级g)7.应用名称其中遇到的问题1.启动页图片变形(提供多张分辨率的图,但是效果不理想。最后允许一部分的拉伸)2.修改了多处关于以前老版本的字样的信息3.因为并没有多次升级需求,去掉了升级4.登录页的给的尺寸不对...原创 2020-02-20 15:33:19 · 157 阅读 · 0 评论 -
android studio 使用网络版本的gradle
apply from 'http://'原创 2020-02-18 09:34:13 · 839 阅读 · 0 评论 -
上传到Bintray和上传到jcenter
资料说明上传到bintray之后,可以一键上传到jcenter基本用法配置gradle工程最外层的build.gradlebuildscript { ext.kotlin_version = '1.3.61' repositories { google() jcenter() } dependencies { ...原创 2020-02-18 09:16:12 · 703 阅读 · 0 评论 -
封装-分页功能的封装
使用 private void initLoadNextPageManager() { //mLoadNextPageManager.loadFirstPage(); mLoadNextPageManager = new LoadNextPageManager() { //这里应该获取一个能传入参数的东西 ...原创 2019-09-10 16:21:12 · 253 阅读 · 0 评论 -
Android-RecyclerView-非常好用的上垃刷新
说明分两个Adapter一个用于专门显示的Adapter,另一个用于刷新的Adapter。用于显示的Adapter集成QuickAdapter,是自己封装的一个Adpater,正常的显示数据,跟平时的逻辑一样刷新的AdapterHeaderAndFooterRecyclerViewAdapter这个将显示的Adapter包裹在其中,刷新的Adapter用于逻辑的处理,也就是嵌套调用...原创 2019-09-10 16:21:50 · 326 阅读 · 0 评论 -
Android高级-里层的ViewPager滑动完毕后外层的ViewPager再滑动
android ViewPager嵌套使用的滑动冲突解决方案,优先让里层的ViewPager滑动完毕后外层的ViewPager再滑动package io.github.luizgrp.sectionedrecyclerviewadapter.demo.viewpager;import android.content.Context;import android.util.Log;impo...原创 2019-09-23 17:27:10 · 418 阅读 · 0 评论 -
Andoid高级-自定义Behavior
资料学习Android CoordinatorLayout之自定义BehaviorAndroid高仿知乎首页BehaviorAndroid CoordinatorLayout之自定义Behavior自定义Behavior的艺术探索-仿UC浏览器主页SheHuan/BehaviorDemoss...原创 2019-09-30 14:29:23 · 272 阅读 · 0 评论