自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android开发简记:140M到67M,学而思网校如何在一周内构建一套可持续的瘦身系统

插件技术使用时存在数据传递问题 自定义UI显示问题,权限重复申请等问题。插件化的核心是ClassLoader,按照谷歌的文档,最快Android 12将会被限制, 未来有不确定性。减包计划实施难度?涉及到20+的二级工程 资源类型众多 调用代码分布广泛,要求在底层框架统一实现核心技术。需要兼容Android4.4到最新的版本系统,同时核心技术兼容后续系统迭代。设备上需要兼容各个手机品牌的高中低,兼容任务繁重。产品迭代迅速,为了避免后续开发导致APP慢慢滋长,需要设计统一的技术框架保持..

2022-03-16 23:07:06 4747

原创 Android属性动画——ObjectAnimator类及浮动菜单的实现

ofFloat方法的第二个参数传入rotationX和rotationY,表示沿X轴、Y轴旋转,0,360表示旋转一周3、尺寸动画为演示尺寸动画的按钮添加单击事件响应的方法scale代码如下:public void scale(View v){//沿X轴缩放ObjectAnimator.ofFloat(imageView,“scaleX”,1,2.0f).setDuration(1000).start();//沿Y轴缩放ObjectAnimator.ofFloat(imageView,“sca

2022-03-16 22:56:03 990

原创 Android安卓反编译apk源代码,移动应用开发课程

https://blog.csdn.net/qq15577969/article/details/79515621二、解压apk文件举例我的apk文件是demo.apk,直接右键解压(也可以把后缀名apk改成zip再解压)三、dex转换成jar解压好的文件目录里有个classes.dex,这个classes.dex文件就是存放所有java代码的文件,我们将它拷贝到dex2jar-2.0目录下,打开cmd命令窗口,在dex2jar-2.0目录下执行命令:d2j-dex2jar classes.d.

2022-03-16 22:54:28 5642

原创 Android学习指南 — Java知识点汇总,androidtv开发视频教程

| 常见的Error | | || — | — | — || OutOfMemoryError | StackOverflowError | NoClassDeffoundError || 常见的Exception | | || — | — | — || 常见的非检查性异常 | | || ArithmeticException | ArrayIndexOutOfBoundsException | ClassCastException || IllegalArgumentExcept

2022-03-16 22:52:54 188

原创 [Google]-再见-SharedPreferences-拥抱-Jetpack-DataStore,就是这么简单

synchronized (mLock) {mLoaded = false;}new Thread(“SharedPreferencesImpl-load”) {public void run() {loadFromDisk();}}.start();}复制代码正如你所看到的,开启一个线程异步读取数据,当我们正在读取一个比较大的数据,还没读取完,接着调用 getXXX() 方法。public String getString(String key, @Nullabl

2022-03-06 17:36:02 151

原创 ViewPager,ScrollView 嵌套ViewPager滑动冲突解决,真香定律

ScrollView 里面嵌套ViewPager导致的滑动冲突外部解决法如上面所述,从 父View ScrollView着手,重写 OnInterceptTouchEvent方法,在上下滑动的时候拦截事件,在左右滑动的时候不拦截事件,返回 false,这样确保子View 的dispatchTouchEvent方法会被调用,代码 如下/**@ explain:这个ScrlloView不拦截水平滑动事件,是用来解决 ScrollView里面嵌套ViewPager使用的@ author.

2022-03-06 17:31:47 661

原创 UML时序图,安卓开发框架

8、时序图和协作图是可以相互转化的,只要按F5就可以轻松转化。————————————————————————————————————————————————————————中央控制序列图分布控制序列图范例:[自调用、调用、创建、销毁、自销毁、同步、异步消息]循环与条件:[loop 、alt、 opt、 guard警戒]——————————————————————————————————————一. 时序图 (Sequence Diagram)1.时序图的概念时序图定义 :&.

2022-03-06 17:30:22 5112

原创 Thinkphp5,android开发视频播放全屏选集

}}/**生成一个可点击的按钮@param string $url@param int $page@return string*/protected function getAvailablePageWrapper($url, $page){return ‘’ . $page . ‘’;}/**生成一个禁用的按钮@param string $text@return string*/protected function ge

2022-03-06 17:28:57 109

原创 ShareSDK for Android常见问题汇总(一),android 工作资料

【问题3】:为什么我使用Demo中人人网的AppId和ApiKey以后,无法授权和获取资料答案:Demo中的开发者帐号是测试帐号,仅用于集成演示,按照人人网的规定,如果您的帐号要使用这个ApiKey进行调试,需要在我们的开发者信息中注册你的帐号信息,因为你的帐号我们是不知道的,因此我们没有将你的帐号注册到我们的测试帐号列表里面,因此你无法使用Demo授权你的帐号并获取资料。      我们并不建议开发者直接使用我们放在ShareSDKDevInfor.xml中的开发者信息,因

2022-03-06 17:26:06 159

原创 [译] Plaid 应用迁移到 AndroidX 的实践经历,Android程序员必会

变更最少的代码以保证应用可以仍能正常运行。在运行 AndroidX 迁移工具后,大量的代码被变更,然而项目却无法编译成功。此时,我们仅仅做了最少量的工作来使应用重新运行起来。这个方法有利于把流程拆解为可控的步骤。我们留下了一些任务,诸如修复导入顺序、提取依赖变量、减少完整 classpath 的使用,以便后续的清理工作。刚开始出现的报错之一是重复的类 —— 像这种情况,PathSegment:Execution failed for task ‘:app:transformDexArchiveW.

2022-03-05 20:03:46 126

原创 zookeeper协议篇-Paxos算法与ZAB协议,android编程实现计算器

1982年 ,Lamport与另两人共同发表了论文提出了一种计算机容错理论,为了描述这个理论中的问题,假设了一个问题相关的故事场景,如下:拜占庭帝国有许多支军队,不同军队的将军之间必须制订一个统一的行动计划,从而做出进攻或者撤退的决定,同时,各个将军在地理上都是被分隔开来的,只能依靠军队的通讯员来进行通讯。然而,在所有的通讯员中可能会存在叛徒,这些叛徒可以任意篡改消息,从而达到欺骗将军的目的。这就是著名的拜占庭问题,而这个问题就和分布式场景下异步系统和不可靠的协议中达到一致性类似,后来Lamport 在

2022-03-05 20:00:56 80

原创 Widget桌面小组件-Android学习笔记,总结到位

特点–快捷、方便个性化、可定义功能可及时控制更新Widget显示内容用法步骤流程图Created with Raphaël 2.1.2 绘制Widget布局 配置Widget的基本属性 定义AppWidgetProvider 提供Configuration Activity学习目标掌握Android Widget基础用法及步骤Android Widget实现一个基本的时钟功能效果–可以自动更新时间可以添加删除时钟Widget实验过程

2022-03-05 19:58:06 2295

原创 Weex线上踩坑实录,移动端内嵌h5页面

注意:不要采用在上一个页面点击时去判断本地js版本,然后下载运行的方式。该方式看起来很美好,又能实时更新效率又高,但是其实并不然。问题在于该方式需要去请求服务器获取js更新状态,万一网络差的时候就一直不会初始化容器,此时用户点击多次就会打开多个页面,非常的不友好,而且会给服务器带来无所谓的压力。###3.不同的业务模块中如何进行业务交互weex和rn不一样,在rn中所有的业务默认都是放到一个模块中的,所以rn帮我们处理了通信这一块内容。但是weex不一样,weex中不同业务是不同的js文件,导致通信困难

2022-03-05 19:56:41 620

原创 WebView遇到的坑及优化,android驱动开发书籍

}});(5) WebView调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片。怎么解决?原因分析:因为Google攻城狮们对setWebChromeClient的回调方法openFileChooser做了多次修改,5.0以下openFileChooser有几种重载方法,在5.0以上将回调方法该为了onShowFileChooser。解决方案:为了兼容各个版本,我们需要对openFileChooser()进行重载,同时针对5.0及以上重写onShowFileC

2022-03-05 19:55:15 1224

原创 vue-admin-template 动态路由的实现(方式二 推荐),如何快速的开发一个完整的直播app

export function logout() {return request({url: Api.TakeOut,method: ‘get’})}登录接口数据{‘code’: 200, ‘data’: {‘token’: ‘X-admin’}, ‘message’: “操作成功”}退出接口数据{‘code’: 200, ‘data’: ‘success’, ‘message’: “操作成功”}详情接口数据{“code”: 200,“data”: {“avatar”: “htt

2022-03-05 19:53:50 1116

原创 Dynamic-Programming(动态规划)最细解题思路+代码详解,androidstudiojni开发

由于我们的目的是从左上角到右下角一共有多少种路径,那我们就定义 dp[i] [j]的含义为:当机器人从左上角走到(i, j) 这个位置时,一共有 dp[i] [j] 种路径。那么,dp[m-1] [n-1] 就是我们要的答案了。注意,这个网格相当于一个二维数组,数组是从下标为 0 开始算起的,所以 右下角的位置是 (m-1, n - 1),所以 dp[m-1] [n-1] 就是我们要找的答案。步骤二:找出关系数组元素间的关系式想象以下,机器人要怎么样才能到达 (i, j) 这个位置?由于机器人可以

2022-03-04 19:25:34 95

原创 Dart VM 的相关简介与运行模式解析,kotlin语言特性

Dart VM 有多种执行代码的方式,例如:使用源代码或内核二进制文件的 JIT 模式;使用快照:来自 AOT 快照;来自 AppJIT 快照;然而它们之间的主要区别在于: VM “何时”以及“如何”将 Dart 源代码转换为可执行代码,然后保证执行的运行时环境保持不变。VM 中的任何 Dart 代码都在某个 isolate 中运行,可以将其描述为:具有自己的内存(堆)并且通常具有自己的控制线程(mutator 线程)的 Dart 隔离宇宙。VM 可以有许多 isolate 同时执行 D

2022-03-04 19:22:46 310

原创 ConstrainLayout 基础教程,OMG学它

layout_constraintRight_toRightOf // 右边右对齐layout_constraintTop_toTopOf // 上边顶部对齐layout_constraintTop_toBottomOf // 上边底部对齐layout_constraintBottom_toTopOf // 下边顶部对齐layout_constraintBottom_toBottomOf // 下边底部对齐layout_constraintBaseline_toBaselineOf // 文本内.

2022-03-04 19:21:18 330

原创 Cocos2d-x 2,android开发语言kotlin

项目参考路径:D:\software\cocos2d-x-2.2.3\projects\TestApp项目引入库大致路径:D:\software\cocos2d-x-2.2.3\cocos2dx\platform\android\java这里笔者直接把引入入库项目中的src的包直接复制过来了,如图的org.cocos2dx.lib,还要把相关的资源复制到项目中去,大致路径是:D:\software\cocos2d-x-2.2.3\projects\TestApp\Resources,复制资源到目标项目中

2022-03-04 19:19:53 291

原创 bat批处理循环执行adb命令,非科班面试之旅

=================================================================基本=============================================================== KEYCODE_0按键’0’7KEYCODE_1按键’1’8KEYCODE_2按键’2’9KEYCODE_3按键’3’10KEYCODE_4按键’4’11KEYCODE_5按键’5’12KEYCODE_6按键’6’13KEYCODE.

2022-03-04 19:17:03 879

原创 Arouter讲解4_Core,flutter游戏

被Route注解的会生成类似下面这样的类 如果是IProvider类型的,会生成类似下面的类如果是 IInterceptor 类型的,会生成类似下面的类,其实 IInterceptor 也是 IProvider类的子类可以用Class 来进行路由,是因为生成了类似下面这样的类,path就是类的全限定名。收集每个组的类。ARouter.init路由初始化ARouter.init(getApplication());public static void init(Appl.

2022-03-04 19:15:38 91

原创 JWT在Java和Android中的使用,音视频开发工程师需要具备的知识

Date issuedAt = jwt.getIssuedAt();//Returns the JWT ID value or null if it’s not defined in the Payload.String id = jwt.getId();//Private ClaimsClaim claim2 = jwt.getClaim(“isAdmin”);} catch (JWTDecodeException exception){//Invalid token}}三、JWT在An

2022-03-02 23:19:58 404

原创 Jetpack 架构组件之 Lifecycle (三) 原理,androidstudio播放音频

================所有源码基于Lifecycle最新版本 v2.2.0Lifecycle 的源码内容不多,非常轻量。Lifecycle 的核心设计模式就是观察者模式, 通过Lifecycle 的方法:addObserver(LifecycleObserver observer) 也可以看出来。一个非常有趣的地方是Lifecycle 观察到Activity的生命周期变化时机 是如何实现的。假设我们还没有看过源码,就来猜一下:当调用 LifecycleOwn

2022-03-02 23:18:33 90

原创 Jetpack Compose简易入坑,教你如何增加拿到BAT大厂offer几率

到这里,我们可以了解到:1 Compose是声明式UI,不是传统的命令式UI,不是拿着View去setXXX(),而是用函数去描述一种UI状态。2 Compose采用的是属性细化和行为隔离的思想,比如demo里面,text就是Text直接的属性,而background是modifier的一个属性,因为像图片Image就没有text属性,但是却有background属性,所以Compose就将公有属性提取到Modifier中,将独有属性绑定到View自身,这就是一种属性细化的思想,而且点击事件是在

2022-03-02 23:17:08 127

原创 Java面试题八:抽象类和接口的区别,快手安卓面试题

答:抽象类生来就注定它是要被继承的,如果没有任何一个类去继承它的话,那么也就失去了它的意义;抽象方法生来就是要被重写的,而且是必须重写。(只要继承了某个抽象类,就必须去重写此抽象类中含有的抽象方法)话不多说,看代码:public abstract class AbstractAnimal {public abstract void eat();public abstract void sleep();}以上代码是定义了一个叫做AbstractAnimal 的抽象类,其中含有eat()和

2022-03-02 23:14:18 79

原创 Java集合各实现类的底层实现原理,android指纹识别

参考文献:http://blog.csdn.net/lizhongkaide/article/details/50595719HashMap是基于哈希表的Map接口的非同步实现,允许使用null值和null键,但不保证映射的顺序。底层使用数组实现,数组中每一项是个单向链表,即数组和链表的结合体;当链表长度大于一定阈值时,链表转换为红黑树,这样减少链表查询时间。HashMap在底层将key-value当成一个整体进行处理,这个整体就是一个Node对象。HashMap底层采用一个Node[]数

2022-03-02 23:12:53 102

原创 java1,android开发者文档隐私权限

这就是今天这篇blog的主角:可变的参数类型,也称为不定参数类型。英文缩写是varargus,还原一下就是variable argument type。通过它的名字可以很直接地看出来,这个方法在接收参数的时候,个数是不定的。那么好,现在就先来调用下这个方法。请看代码和输出:public class TestVarArgus {public static void dealArray(int… intArray){for (int i : intArray)System.out.print(i +"

2022-03-02 23:08:37 83

原创 IO优化是怎么做的,使用 SharedPreferences为什么这么卡,mmkv原理是什么

1.2 特点高性能 实时写入稳定 防crash多进程访问通过与 Android 开发同学的沟通,了解到系统自带的 SharedPreferences 对多进程的支持不好。现有基于 ContentProvider 封装的实现,虽然多进程是支持了,但是性能低下,经常导致 ANR。考虑到 mmap 共享内存本质上的多进程共享的,我们在这个基础上,深入挖掘了 Android 系统的能力,提供了可能是业界最高效的多进程数据共享组件。匿名内存在多进程共享的基础上,考虑到某些敏感数据(

2022-03-02 23:07:12 283

原创 Android:主流三方库源码教你快速上手Leakcanary,系统学Android从零开始

7、AndroidRefWatcherBuilder#buildAndInstall()private boolean watchActivities = true;private boolean watchFragments = true;public @NonNull RefWatcher buildAndInstall() {// 1if (LeakCanaryInternals.installedRefWatcher != null) {throw new UnsupportedOpe

2022-03-01 13:57:36 91

原创 Android自定义下拉刷新,kotlin开发windows程序

@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);mWidth = MeasureSpec.getSize(widthMeasureSpec);mHeight = MeasureSpec.getSize(heightMeasureSpec);setMeasuredDimension(m

2022-03-01 13:56:11 218

原创 狗网官网farlucky 官网可直接取回CSGO饰品皮肤网页开箱网站

狗网官网farlucky 官网可直接取回CSGO饰品皮肤网页开箱网站farlucky 官网可直接取回CSGO饰品皮肤网页开箱网站官方链接: skinsdog.cc邀请码: csgo (注册使用可在首页免费开箱)

2021-10-29 17:14:59 372

空空如也

空空如也

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

TA关注的人

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