自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android studio 使用JitPack发布library到Github开源库

打开你要上传的工程,顶部菜单选择VCS->Import into Version Control->Share Project on GitHub,如下图所示:如果你是第一次提交该项目会出现如下对话框,提示你这是一个新的存储库(repo),可以自定义repo的名字,和添加描述填写完毕点击share按钮如果你的工程没有问题会出现如下界面![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217152438102.png?x-oss-process=

2022-04-29 13:16:29 341

原创 Android Scroller简单用法

Scroller这个类理解起来有一定的困难,刚开始接触Scroller类的程序员可能无法理解Scroller和View系统是怎么样联系起来的。我经过自己的学习和实践,对Scroller的用法和工作原理有了一定的理解,在这里和大家分享一下,希望大家多多指教。首先从源码开始分析:View.java[java]  [view plain](() [copy](()/*** Called by a parent to reque

2022-04-29 13:14:34 392

原创 Android Material Design尝鲜

FlexibleSpaceToolbarScrollViewActivity // 15FlexibleSpaceWithImageScrollViewActivity // 16FlexibleSpaceWithImageRecyclerViewActivity // 17FlexibleSpaceWithImageWithViewPagerTab2Activity // 18FlexibleSpaceWithImageListViewActivity // 19Frag..

2022-04-29 13:12:31 193

原创 android app启动页(闪屏页)白屏快速优化方案实践

3.特别说明本文就不聊zygote创建进程运行app的那一堆原理来班门弄斧了,只谈一谈解决问题最简单的方法,对原理有兴趣的可以自行翻阅【参考文献】中的相关文档。4.解决思路通过给activity指定带有window背景的theme来避免白屏(设置window背景)优点缺点设置window背景能够快速解决显示白屏问题可能会引起背景图拉伸问题5.快速解决方案创建一个style,清单文件里单独给启动页的theme设置为该style,代码如下: _@drawable/b

2022-04-29 13:10:58 1800 1

原创 Android 12上焕然一新的小组件:美观、便捷和实用

前言简要回顾下移动平台在小组件设计上的持续探索:早期的Android版本缺乏美观,小组件更是常年未改。似乎除了天气、时钟等常用小组件以外鲜少使用,逐渐被人遗忘Windows Phone的动态磁贴在自由尺寸的Logo上灵活展示信息的设计非常超前,奈何生态构建困难,早已退场Apple向来稳重(保守),直到iOS 10才引入小组件,但负一屏限制着它的发展。直到iOS 14的全面支持才大获成功,大有后来居上的态势VIVO紧随其后重磅推出的OriginOS则将Logo和小组件完美融合,试图一统磁贴和小组件

2022-04-29 13:09:27 1241

原创 Android - 带着问题看源码之 ViewModel

// 注入数据参数fun provideUserViewModelFactory(): MyViewModelFactory {val repository = UserRepository.getInstance()return MyViewModelFactory(repository)}}// ViewModel 工厂类class MyViewModelFactory(private val userRepository: UserRepository,) : ViewModelPr

2022-04-29 13:07:39 1142

原创 AMS重要的数据结构解析(三)

final String shortComponentName; // the short component name of the intentfinal String packageName; // the package implementing intent’s componentfinal String processName; // process where this component wants to runfinal String taskAffinity; // as per

2022-04-29 13:05:59 2303

原创 AMS重要的数据结构解析(一)

if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new task " +r.task);}} else if (sourceRecord != null) {… //这里过程类似,省略掉} else if (inTask != null) {…} else {// This not being started from an existing activity, and not part//

2022-04-29 13:03:41 2058

原创 A022-列表容器之ExpandableListView

android:background=“@drawable/ic_leftnav_10” /><TextViewandroid:id=“@+id/tv_group_text”android:layout_width=“wrap_content”android:layout_height=“wrap_content”android:layout_centerVertical=“true”android:layout_marginLeft=“59dp”android:text=“时局”

2022-04-29 13:01:56 92

原创 2020春招BAT面试真题详解,你还在犹豫看不看,别人已经学走了

这样在Activity内部创建了一个非静态内部类的单例,每次启动Activity时都会使用该单例的数据。虽然这样避免了资源的重复创建,但是这种写法却会造成内存泄漏。因为非静态内部类默认会持有外部类的引用,而该非静态内部类又创建了一个静态的实例,该实例的生命周期和应用的一样长,这就导致了该静态实例一直会持有该Activity的引用,从而导致Activity的内存资源不能被正常回收。解决方法:将该内部类设为静态内部类或将该内部类抽取出来封装成一个单例,如果需要使用Context,就使用Applicatio..

2022-04-29 12:57:31 111

原创 Android MTK 设置默认启动 Launcher

类名//Slog.d(TAG,“set default launcher”);final PackageManager mPm = mContext.getPackageManager();ArrayList homeActivities = new ArrayList();ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);ComponentName[]mHomeComponentSet = new C

2022-04-28 11:35:11 571

原创 Android MotionLayout:以最简单的方式创建类似Twitter的“福师大APP

MotionLayout是Android ConstraintLayout的子类,可让您非常轻松地为应用程序中的任何视图或布局设置动画。虽然仍处于测试阶段,但尚未得到广泛采用,但是我已经可以想象到,稳定发行后人们会想到的独特的交互式动画![](()什么是MotionLayout?快速介绍简而言之,MotionLayout是一个ConstraintLayout允许您轻松在两个ConstraintSet之间进行转换的工具。ConstraintSet包含每个视图的所有约束和布局属性。Tra..

2022-04-28 11:33:40 257

原创 Android JSON:Gson,FastJson解析库的使用和对比分析

“title”: “日本文学”},{“count”: 38,“name”: “小说”,“title”: “小说”},{“count”: 32,“name”: “满月之夜白鲸现”,“title”: “满月之夜白鲸现”},{“count”: 15,“name”: “爱情”,“title”: “爱情”},{“count”: 8,“name”: “純愛”,“title”: “純愛”},{“count”: 8,“name”: “外国文学”,“title”: “外国文学

2022-04-28 11:32:01 168

原创 Android Binder 的主要内容概述以及特性和原理

[图片上传失败…(image-a27659-1628086130715)][](()三、Linux下IPC原理[图片上传失败…(image-7a3593-1628086130715)][](()1.进程隔离进程与进程间内存是不共享的。两个进程就像两个平行的世界,A 进程没法直接访问 B 进程的数据,这就是进程隔离的通俗解释。A 进程和 B 进程之间要进行数据交互就得采用特殊的通信机制:进程间通信(IPC)。[](()2.用户空间与内核空间每个Android的进程,只能运行在自

2022-04-28 11:30:21 96

原创 Android app自动化测试(Monkey的测试原理和方法)

事件类参数1、-s 作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件序列。例:adb shell monkey -s 1483082208904 -v 102、–throttle 作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件,所以此处一般.

2022-04-28 11:28:03 732

原创 android app启动页(闪屏页)白屏快速优化方案实践

创建一个启动页界面,布局里设置背景为一张图片,并放一个textview:class SplashActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_splash)}}<?xml version="1.0" encoding="utf-8"?&

2022-04-28 11:26:26 442

原创 Android - weight,patch图片,shape图形

如果线性布局是竖直的,View的高度=原有高度+线性布局剩余空间的占比3.Android官方推荐,在使用android:layout_weight时,如果线性布局是水平的,要将android:layout_width设置为0dp如果线性布局是竖直的,要将android:layout_height设置为0dp2.9patch图片(.9.png拼接图片)1号黑色条位置向下覆盖的区域表示图片横向拉伸时,只拉伸该区域2号黑色条位置向右覆盖的区域表示图片纵向拉伸时,只拉伸该区域3号黑色条位置向左覆盖的区

2022-04-28 11:24:52 128

原创 Activity的四种launchMode

2.singleTop我们在上面的基础上为指定属性android:launchMode=“singleTop”,系统就会按照singleTop启动模式处理跳转行为。我们重复上面几个动作,将会出现下面的现象:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jo7jNxD-1651116163920)(http://hi.csdn.net/attachment/201109/6/0_1315304635SODU.gif)][外链图片转存失败,源站可能有防盗链机制,建议将图片

2022-04-28 11:23:02 118

原创 @Android程序员:总是说Android凉了

Android 核心技术:介绍 Android 开发中常用的核心技术,比如自定义 View、Handler,以及一些开源框架的原理实现,来夯实你的底层能力。只有底层能力足够出色,之后的进阶之路才会更加轻松。常见问题剖析:介绍一些项目中常见的疑难问题,使你能够对现有项目做出合理的重构优化。1、确定好方向,梳理成长路线图不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的..

2022-04-28 11:20:40 70

原创 5年Android程序员面试字节跳动两轮后被完虐,请查收给你的面试指南

5、jvm内存模型(感觉这个是面试官可怜我,看我什么都不会才问的=。=)6、Future和microtask执行顺序7、dart中…的用法(基本没用过。。)8、await for(没用过。。)说实话,第一个、第三个、第六个我准备的话应该能答出来的,但是一个多月没碰Flutter了,忘了都差不多。。。此外GitHub和博客维护好很重要,像我这种demo随手写,随手删的人直接GG。。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nVCNajO-16511158894

2022-04-28 11:18:28 172

原创 Android 版本适配:9

blacklist(黑名单):无论 targetSdkVersion 为多少,只要应用运行在 Android 9.0 平台上,访问此名单中的接口都会受限3.2 如何测试应用是否使用非 SDK 接口可以通过以下方式进行测试(详情请至[官方文档](()):使用 Android 9.0 或更高版本的设备调试应用使用 StrictMode API 进行测试使用 veridex 工具对应用进行扫描建议使用第三种方式,该工具的扫描结果会列出应用对于三个限制名单中的接口的调用细节。4. 前台服务权限.

2022-04-27 12:49:11 640

原创 Android 开发艺术探索笔记(17)

跟之前两个一样,也是看WindowManagerGlobal的updateViewLayout方法。就是用新的View的LayoutParams替换老的,接着再去更新ViewRootImpl中的LayoutParams。通过ViewRootImpl中的ScheduleTraversals方法对View进行重布局,除了本身的重绘以外,还回去通过Session来更新Window视图,最终也是到了WindowManagerService中,同样是IPC过程。Window的创建一共分为三个部分,因为Windo

2022-04-27 12:45:37 280

原创 Android 应用内自定义随机布局输入法

android:visibility=“gone” />主界面代码package com.demo.customime;import android.app.Activity;import android.inputmethodservice.KeyboardView;import android.os.Bundle;import android.view.WindowManager;import android.widget.EditText;public class MainAc

2022-04-27 12:43:58 186

原创 Android 外部存储与内部存储详解

File file = getExternalFilesDir(null);try {if (!file.exists()) {file.createNewFile();}FileOutputStream fos = new FileOutputStream(path, true);String str = infoEdt.getText().toString();fos.write(str.getBytes());} catch (IOException e) {e.printStac

2022-04-27 12:42:19 747

原创 Android 启动优化: JetPack App Startup 使用及源码浅析

今天,就让我们来聊一聊 JetPack App Startup。目录1 什么是 JetPack App Startup2 JetPack App Startup 能解决什么问题3 JetPack App Startup 基本使用4 JetPack App Startup 进阶使用5 JetPack App Startup 源码浅析6 小结[](()什么是 JetPack App Startup=====================================

2022-04-27 12:40:02 433

原创 Android 单元测试之 Mockk

relaxed: 是否对其代码进行依赖,默认为否,这个参数比较关键,后续会更细的讲解一下moreInterfaces: 让这个mock出来的对象实现这些声明的接口relaxUnitFun:和relaxed 差不多,但是只针对于 返回值是Unit 的方法, 后续会讲解一下block: 该语句块表示你在创建完 mock 对象后的操作,相当于 .also{ ... } 语句[](()2.3.2 relaxed 和 relaxUnitFun在 mock 一个对象时,这两个参数的意义是什..

2022-04-27 12:38:25 1663

原创 Android 修改系统音量及监听

}还调用了setStreamVolume方法,这里就涉及到setStreamVolume和adjustStreamVolume的区别:setStreamVolume 直接设置音量,指哪打哪adjustStreamVolume 步长式设置音量,即10,20,30这样阶梯式二者都可以设置音量,可以根据自己的业务需求来选择。[](()setStreamVolume来看一下具体的setStreamVolume方法:private fun setStreamVolume(volume: In

2022-04-27 12:36:50 2008

原创 Android WebView 踩坑日记,字体怎么突然变小了?

Web 网页字体的适配规则,这里就不班门弄斧了,有兴趣的可以自行搜索。[](()端内其他地方排查我们知道,加载自定义 html,通常需要调用 loadDataWithBaseURL 方法,查看端内调用的地方,发现其他都是正常的。只有这个奇葩 SignatureWebView ,自己拼接的 html 没有加 viewport 属性,进行适配[](()总结================================================================如果 html

2022-04-27 12:35:00 184

原创 Android View使用、自定义和性能优化

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”android:id=“@+id/ll_view”android:layout_width=“match_parent”android:layout_height=“match_parent”android:background=“@color/color_666666”android:orientation=“vertical”>

2022-04-27 12:32:38 193

原创 Android Studio自定义模板实现一键创建MVP结构

上面的代码块表示是否同时自动创建一个Activity对应的布局<parameterid=“layoutName”name=“Layout Name”type=“string”constraints=“layout|unique|nonempty”suggest=“${activityToLayout(activityClass)}”default=“activity_main”visibility=“generateLayout”help=“The name of the layou

2022-04-27 12:30:26 267

原创 Android 组件化实战

buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’}}}dependencies {implementation fileTree(dir: “libs”, include: [“*.jar”])implementation “com.android.support:appcomp

2022-04-26 22:16:08 126

原创 Android 相关源码分析

@Nullable Executor callbackExecutor) {DefaultCallAdapterFactory executorFactory = new DefaultCallAdapterFactory(callbackExecutor);return hasJava8Types? asList(CompletableFutureCallAdapterFactory.INSTANCE, executorFactory)singletonList(executorFactory)

2022-04-26 22:14:13 331

原创 Android 清除缓存详细实现(显示缓存大小)

}}private static boolean deleteDir(File dir) {if (dir != null && dir.isDirectory()) {String[] children = dir.list();for (int i = 0; i < children.length; i++) {boolean success = deleteDir(new File(dir, children[i]));if (!success) {return

2022-04-26 22:12:42 715

原创 Android 总结:Message,MessageQueue,Looper,Handler 消息机制

//这里以主线程的Looper对象创建了handler,//所以,这个handler发送的Message会被传递给主线程的MessageQueue。handler = new MyHandler(looper);handler.removeMessages(0);//构建Message对象//第一个参数:是自己指定的message代号,方便在handler选择性地接收//第二三个参数没有什么意义//第四个参数需要封装的对象Message msg = handler.obtainMessage

2022-04-26 22:11:04 379

原创 Android 屏幕适配之dimens适配

3px4.5px6px省略若干行…1918.5px1920pxvalues-2560x1440文件夹下面的dimens.xml文件就应该是这样的:2px4px6px8px省略若干行…2558px2560px其实主要的分辨率就这三种,至于低于1280x720的分辨率的手机配置太低了,不在我们项目的适配考虑之内(如果需要适配建立对应的dimens文件即可)/**@param context@return 获取屏幕原始尺寸高度,包括虚拟功能键高度*/public

2022-04-26 22:09:26 2063

原创 Android 实现系统深度休眠笔记

context.sendBroadcast(new Intent(“tchip.intent.action.ACTION_KEY_POWER”));接收的应用,需要具备INJECT_EVENTS权限:和系统的userId:android:sharedUserId=“android.uid.system”接收到此广播后,发出对应的key即可:sendKeyCode(KeyEvent.KEYCODE_POW 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源

2022-04-26 22:07:08 1325

原创 Android 存储进化:分区存储

应用私有目录:存储应用私有数据,外部存储应用私有目录对应Android/data/包名共享目录:存储其他应用可访问文件, 包含媒体文件、文档文件以及其他文件,对应设备DCIM、Pictures、Alarms, Music, Notifications,Podcasts, Ringtones、Movies、Download等目录。[](()2.2.1 应用私有空间与以往相同的是,访问自身的外部存储下的应用私有空间是不需要任何权限的。与内部一样,也有一个目录专为应用的持久性文件而设计,和另一个..

2022-04-26 22:05:32 2794

原创 android 仿QQ五毛特效之查看红包领取详情界面

return width;}/**获得屏幕高度*/public static int getScreenHeight(Context context) {WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(o

2022-04-26 22:03:59 95

原创 Android 三类框架的理解以及MVVM框架的使用

| — | — || MVP | Model, Presenter, View || MVC | Model, Controller ,View || MVVM | Model, View ,ViewModel |3.简要分析区别Activity职责不同,Activity在MVP中是View层,在MVC中是Controller层,这是MVC和MVP很主要的一个区别,可以说Android从MVC转向MVP开发也主要是优化Activity的代码,避免Activity的代码臃肿庞大。View层

2022-04-26 22:02:11 393

原创 Android Studio中的EditText控件使用详解

注意看软键盘,已经变成拨号专用的啦.有时候我们只想输入数字,不想输入字母,EditText为我们提供了android:numeric来控制输入的数字类型,一共有三种分别为integer(正整数)、signed(带符号整数)和decimal(浮点数)。这里以signed类型的为例,修改main.xml如下:Xml代码   <?xml version\="1.0" encoding\="utf-8"?>  <Lin

2022-04-26 21:59:48 3920

空空如也

空空如也

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

TA关注的人

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