自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android Intent用法全面详解,androidui设计原理

2.拨打电话:调用拨号程序分两种情况,一种是跳转到拨号界面,另一种是直接拨打电话。根据不同的需求选择不同的方式。1)这种写法是跳转到对应的拨号界面Uri uri = Uri.parse(“tel:xxxxxx”);Intent it = new Intent(Intent.ACTION_DIAL, uri);startActivity(it);2)这种写法是直接拨打电话Uri uri = Uri.parse(“tel.xxxxxx”);Intent it =new Intent(Intent

2022-03-03 13:41:26 108

原创 Android Studio编译错误:Error while generating the main dex list

com.android.build.api.transform.TransformException: Error while generating the main dex list.这个是开了multidex的,如果你没开multidex, 可能不是这个错误,但是也是一个dex error的错误,出现这个错误的根本原因一般是项目中出现了重复的java类导致冲突。所谓的“项目中出现了重复的java类”一般包括下面几种情况:libs下的jar包或者aar包跟build.gradle中添加的远程.

2022-03-02 19:22:46 498

原创 Android studio权限使用相关相关,轻松获得一线大厂面试offer

import androidx.core.app.ActivityCompat;import android.Manifest;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Bundle;import android.telephony.SmsManager;i

2022-03-02 19:19:55 68

原创 Android SDK 提供的3套音频播放的API之窥探AudioTrack,flutter人脸识别插件

当处理适合内存且需要以最小延迟播放的短声音时,应该选择静态模式。因此,静态模式更适合那些经常玩的UI和游戏声音,并且开销尽可能小。setBufferSizeInBytes setBufferSizeInBytes:int: 用于读取音频数据的内部缓冲区的总大小(以byte为单位)。如果 mode 是 MODE_STATIC ,其为音频最大长度; 如果是 MODE_STREAM ,其值要大于等于接收流的最小缓冲区大小, 建议使用 getMinBufferSize(int, int, int) 方法来

2022-03-02 19:17:05 2251

原创 Android Fragment 的妙用 - 优雅地申请权限和处理 onActivityResult

在 onRequestPermissionsResult 方法里面进行处理,然后进行相应的操作。@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == 10) {if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {callPhone(.

2022-03-02 19:15:40 499

原创 Android AsyncTask 深度解析,面试必会

MyAsyncTask task = new MyAsyncTask();task.execute(10);//对应类中第一个泛型Integer}/**求和异步任务*/class MyAsyncTask extends AsyncTask<Integer, Integer, Long> {/**初始化任务,展示进度条,在主线程*/@Overrideprotected void onPreExecute() {super.onPreExecute();Log.d(

2022-03-02 19:14:05 56

原创 Android Architecture Components ——lifecycle 使用,安卓开发项目经历

使用OnLifecycleEvent注解对应的生命周期,具体对应枚举Event继承成FragmentActivity的Activity在Activity中进行监听操作public class LifecycleOneActivity extends AppCompatActivity {private String TAG = “huangxiaoguo”;private IObserver mObserver;@Overrideprotected void onStart() {sup

2022-03-02 19:12:39 36

原创 Android AIDL:跨进程调用Service (AIDL Service),大厂Android开发面试解答

1. 相关知识点Android系统中的进程之间不能共享内存,需要提供一些机制在不同进程之间进行数据通信,这个机制就是AIDL。1. AIDL: Android Interface definition languageAndroid内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。2. IPC:interprocess communication (内部进程通信)3. 如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可

2022-03-02 19:11:14 2244

原创 Android 3年外包工面试笔记,有机会还是要去大厂学习提升

一、广州博冠这家是以硬件为主进行的智能软硬件结合的公司,硬件资源丰富,集团主要做望远镜等等很多,面试这家主要做智能家居方向的,目前有成熟的产品上线,接下来准备做智能监控方向的app项目,硬件工程师,后端工程师,硬件,软件都自己做,老牌公司,还是挺完整的。第一面面试官看起来比较成熟,但也大不过我几岁,问的问题大概是基础内容,下面回忆整理下:网络方面tcp/ip 三次握手过程udp理解多线程是否自己实现过/如何避免线程死锁等问题基础方面Android四大组件一一介绍a

2022-03-02 19:09:49 56

原创 Android权限检查API checkSelfPermission失效问题,想学IT的必看

if (mask != 0) {mPackageManager.updatePermissionFlags(permission.getName(),mPackageInfo.packageName, mask, 0, mUserHandle);}}}return true;}可以看出6.0之后的手机,针对targetSdkVersion是否高于23做了不同处理,如果targetSdkVersion>=23支持动态权限管理,那就更新动态权限,并将其持久化到runtime-permis.

2022-03-01 21:02:19 1880

原创 android替换Glide通讯组件为Okhttp并监控加载进度,安卓rxjava获取网络时间

import com.bumptech.glide.load.model.GlideUrl;import com.bumptech.glide.load.model.ModelLoader;import com.bumptech.glide.load.model.ModelLoaderFactory;import java.io.InputStream;import okhttp3.OkHttpClient;/**仿照HttpUrlGlideUrlLoader*/public class

2022-03-01 21:00:54 211

原创 Android性能优化面试题集锦,android应用开发实训报告

性能优化Android的性能优化,主要是从以下几个方面进行优化的: 稳定(内存溢出、崩溃) 流畅(卡顿) 耗损(耗电、流量) 安装包(APK瘦身) 影响稳定性的原因很多,比如内存使用不合理、代码异常场景考虑不周全、代码逻辑不合理等,都会对应用的稳定性造成影响。其中最常见的两个场景是:Crash 和 ANR,这两个错误将会使得程序无法使用。所以做好Crash全局监控,处理闪退同时把崩溃信息、异常信息收集记录起来,以便后续分析;合理使用主线程处理业务,不要在主线程中做耗时操作,防止ANR程序无响应发生。(一

2022-03-01 20:59:10 194

原创 Android开源的精美日历控件,热插拔设计的万能自定义UI,你值得拥有

XML用法如果需要在日历控件下方使用其它控件,使用CalendarLayout控件即可,calendar_content_view_id为其它控件的id,支持任意控件,如RecyclerView、ListView。CalendarView的calendar_card_view为任意自定义实现的日历绘制控件路径。<com.haibin.calendarview.CalendarLayoutandroid:layout_width=“mat...

2022-03-01 20:56:20 736

原创 Android开发者们跳槽面试,一定要看看这篇文章,kotlin语言架构

常见Android源码,如Handler、AsyncTask等等熟悉Binder原理了解一些Framework常见知识,如AMS同样的,这些都是要系统的掌握和运用。2.6 JNIJNI其实属于Android NDK中的一个技术点,但是它不像上面的知识需要系统的了解,JNI我们只需要知道Java怎么调用C或C++的代码,C或C++怎么调用Java的代码,并且相互之前怎么传递各种参数(对象),因为一般Android开会不会涉及到写复杂的C或C++代码,我们使用NDK也更多是为了调用第三方的一些C或C+

2022-03-01 20:54:55 509

原创 Android开发是简单的「能写应用就行」吗,跨平台移动应用开发框架

扎实的C++、Java基础熟悉网络编程,了解常用网络协议熟悉掌握 Android 界面和交互开发掌握至少一门数据库语言至少有一个完整的 Android 应用开发经验良好的编码风格,沟通能力和团队合作精神,有责任感在 Google Play 上线过自己的 App,加分对开源技术有强烈的兴趣和爱好,有个人blog、Github账号,参与或向开发者提交过 bug 和 patch 者优先#####优秀Android开发的职业成长路径是怎样的?在不同的职业发展阶段..

2022-03-01 20:50:40 28

原创 ConstraintLayout,【一步教学,一步到位

文章6:ConstraintLayout约束布局详解文章7:我的Android开发之旅(三):ConstraintLayout的浅入1、为什么使用ConstraintLayout=======================参考:文章4在绘制复杂UI时,由于Android绘制视图是根据Z-Order机制,一层层迭代绘制,如果布局嵌套过多,UI层级过深,设备在绘制时所需的时间以及计算功耗就会过多,内存占用也就越多,由于绘制是在UI线程执行,而UI线程不能做耗时操作,所以就需要减少布局嵌套过多。普通

2022-02-16 16:14:40 39

原创 android验证验证码界面ui实现倒计时实现,BAT大厂面试总结

padding_left = 0;Bitmap bp = Bitmap.createBitmap(width, height, Config.ARGB_8888);Canvas c = new Canvas(bp);code = createCode();c.drawColor(Color.WHITE);Paint paint = new Paint();paint.setTextSize(font_size);for (int i = 0; i < code.length(); i++

2022-02-15 16:13:32 187

原创 HTTPS 原理分析——带着疑问层层深入,flutter音视频开发

为什么用了 HTTPS 就是安全的?HTTPS 的底层原理如何实现?用了 HTTPS 就一定安全吗?本文将层层深入,从原理上把 HTTPS 的安全性讲透。HTTPS 的实现原理大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实,HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。HTTPS的整体过程分为证书验证和数据传输阶段,具体的交互过程如下:WX201911..

2022-02-05 13:58:44 39

原创 HTTPS 为什么是安全的 _ (下),kotlindata类

Client Hello建立 TCP 连接之后,浏览器率先发出 Client Hello 消息。挑几个重点字段说一下。Version 表示客户端最高支持的 TLS 版本,向下兼容。上图中是 TLS 1.2 (0x0301) 。Random 是客户端生成的一个随机数,后面用于生成主密钥。下文中用 client_random 表示。Random 是 32 字节,但其实随机数的长度是 28 字节,前面四个字节是 UNIX 时间戳,并没有什么意义。Session ID 传递给服务器用于复用缓存的 TCP

2022-02-05 13:57:18 2769 1

原创 HashMap,ArrayMap,SparseArray 源码角度分析,Android中的数据结构你该如何去选择?

当我第一次调用put方法的时候我们的table数组为null,putVal方法内部,会帮我们调用resize()方法帮我们生成一个默认大小的数组。默认大小就是我们的DEFAULT_INITIAL_CAPACITY的值,为16。static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16数组初始化完成之后,会根据通过hash方法生成hash值与(n-1)做&运算计算出我们要存放数据的索引。n就是我们table的大小。如果

2022-02-05 13:55:54 77

原创 Handler机制与原理,android移动应用开发教程清华大学

在外部类对象被销毁时,将MessageQueue中的消息清空在使用Handler时,通常是通过Handler.obtainMessage()来获取Message对象的,而其内部调用的是Message.obtain()方法,那么问题来了,为什么不直接new一个Message,而是通过Message的静态方法obtain()来得到的呢?使用obtain获取Message对象是因为Message内部维护了一个数据缓存池,回收的Message不会被立马销毁,而是放入了缓存池,在获取Message时会先从缓.

2022-02-05 13:54:28 51

原创 Git - 配置并使用多个SSH KEY,金三银四旗开得胜

$ git clone git@gitlab.com:xxxxxxx/text.git4.http协议http/s协议:超文本传输协议 优点:简便 缺点:效率更低$ git clone https://gitlab.com/xxxxxxxx/text.git从上面的对比结果来看,用ssh协议确实更有优势。当然,这并不是本文想要重点阐述的问题。我们在使用ssh协议的时候,需要生成ssh key,如果多个平台(例如同时使用GitHub和Gitlab)都要使用ssh,那么就要生成多组ssh key并

2022-02-05 13:47:24 3444

原创 Glide源码学习五:回调与监听,总结2021年180道Android岗面试题

Android图片加载框架最全解析(四),玩转Glide的回调与监听回调的源码实现=======作为一名Glide老手,相信大家对于Glide的基本用法已经非常熟练了。我们都知道,使用Glide在界面上加载并展示一张图片只需要一行代码:Glide.with(this).load(url).into(imageView);而在这一行代码的背后,Glide帮我们执行了成千上万行的逻辑。其实在第二篇文章当中,我们已经分析了这一行代码背后的完整执行流程,但是这里我准备再带着大家单独回顾一下回调这部分的源码

2022-02-04 14:48:17 69

原创 Flutter的原理及美团的实践(中),移动开发工程师核心竞争力

loadData: (callback) async {Map<String, dynamic> data = await post(“home/groups”);if (data == null) {callback(false);return;}_data = AllCategoryResponse.fromJson(data);if (_data == null || _data.code != 0) {callback(false);return;}callback

2022-02-04 14:42:38 1021

原创 Flutter教程(二) 了解Dart语言,美团Android开发工程师岗位职能要求

Flutter中的DartFlutter能够运行大多数不会直接或间接导入dart:mirrors 或 dart:html的dart代码。Flutter中dart代码会通过AOT编译器编译成本地代码,没有vm,并且dart团队专门针对flutter进行了优化。Dart生态一个语言的成败,重要的一点还是在于生态。而生态的好坏,有两个主要指标:第三方库的数量和开发者数量。Dart目前第三方库还是较少,并且有质量不高,即使是Dart SDK,里面也有很多bug,dart-sdk github现在打开的iss

2022-02-04 14:39:48 962

原创 Flutter开发之——多组件布局容器-Row,移动应用开发专业前景

2.2 属性说明| 属性 | 说明 | 取值 || :-: | :-: | :-: || mainAxisAlignment | 主轴对齐方式 | MainAxisAlignment对象 || mainAxisSize | 主轴尺寸 | MainAxisSize对象 || crossAxisAlignment | 交叉轴对齐方式 | CrossAxisAlignment对象 || textDirection | 水平布局方向 | TextDirection对象 || verticalDirec

2022-02-04 14:36:58 47

原创 Flutter开发之——多组件布局容器-Column,android应用案例开发大全

crossAxisAlignment| 取值 | 说明 || :-: | :-: || start | 左对齐 || end | 右对齐 || center | 居中对齐 || baseline | 基线对齐 || stretch | 拉伸充满父容器(宽度) |textDirection| 取值 | 说明 || :-: | :-: || ltr | 从左到右 || rtl | 从右到左 |verticalDirection| 取值 | 说明 || :-: | :-: || u

2022-02-04 14:35:33 87

原创 mmap详解,十位互联网一线高工手写Android高级知识

}/* 打开文件 */if ((fd = open(argv[1], O_RDWR)) < 0) {perror(“open”);}/* 获取文件的属性 */if ((fstat(fd, &sb)) == -1) {perror(“fstat”);}/* 将文件映射至进程的地址空间 */if ((mapped = (char *)mmap(NULL, sb.st_size, PROT_READ |PROT_WRITE, MAP_SHARED, fd, 0)) == (vo

2022-02-03 18:08:33 44

原创 MarkDown 语法学习,女生学移动应用开发

六级标题######横线–*** --- ___*字型–斜体:* *粗体:** **斜粗体*** ***HTML斜体:<em></em>HTML粗体:<strong></strong>HTML粗斜体:<em><strong></strong></em>引用–> >> >>> ...时间过得好快。Time flies–zms

2022-02-03 18:07:08 618

原创 LiveData概述,flutter二维码识别

确保活动或片段具有可在其变为活动状态时立即显示的数据。只要应用程序组件处于该STARTED状态,它就会从LiveData它正在观察的对象中接收最新值。只有LiveData在设置了要观察的对象时才会出现这种情况。通常,LiveData仅在数据更改时才提供更新,并且仅在活动观察者时提供更新。此行为的一个例外是观察者在从非活动状态更改为活动状态时也会收到更新。此外,如果观察者第二次从非活动状态更改为活动状态,则只有在自上次活动状态以来该值发生更改时才会收到更新。以下示例代码说明了如何开始观察LiveDa

2022-02-03 18:05:43 80

原创 Leetcode面T10(1-9)数组,2021年是意义非凡的一年

}}Q10.2 合并排序的数组编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。来源:力

2022-02-03 18:04:18 367

原创 Kotlin学习(5)函数与函数式编程,安卓11内存优化

然后我们想要过滤出字符串元素的长度是奇数的列表。我们把这个问题的解决逻辑拆成两个函数来组合实现:val f = fun (x: Int) = x % 2 == 1 //判断输入的Int是否奇数val g = fun (s: String) = s.lenth //返回输入的字符串长度然后我们再使用函数h 来封装"字符串元素的长度是奇数"这个逻辑,代码如下:val h = fun(g: (String) -> Int, f: (Int) -> Boo

2022-02-03 18:01:28 383

原创 Jetpack系列(九) — WorkManager,为什么说spring让Android变得更好

params: WorkerParameters) : Worker(ctx, params) {override fun doWork(): Result {// 通知,记得加通道makeStatusNotification(“Blurring image”, ctx)return try {val picture = BitmapFactory.decodeResource(ctx.resources,R.drawable.test)val output = blurBitmap(p

2022-02-03 17:55:49 54

原创 Kotlin-中的-Lambda-与-Inline,还有人不知道什么是AndroidX的吗

fun testLambdaReturn() {higherOrderFunctionFirst {System.out.println(“testLambdaReturn”)return}}上面的代码我们执行预期的输出应该是这样higherOrderFunction.beforetestLambdaReturnhigherOrderFunction.after然后实际的执行结果却有点事与愿违higherOrderFunction.beforetestLambdaReturn原因还

2022-02-02 16:39:14 30

原创 Kotlin 资源大全 - 学 Kotlin 看这一篇就够了,【Android面试题

–介绍官网及文档中文社区教程 & 文章开源库和框架Demo其他介绍–为什么要做 awesome-kotlin-cn ?今天凌晨的 Google I/O 上,Google 正式宣布官方支持 Kotlin. 为了让大家更快了解和上手 Kotlin,掘金技术社区为大家整理了这份 Kotlin 资源大全,希望可以帮助大家用最短时间学习 Kotlin.项目支持?目前项目由掘金管理,Admin: @achilleo, @NeXT, @linmi,

2022-02-02 16:37:50 44

原创 Junit4使用,android开发简历自我评价

JUnit is a simple framework to write repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks.xUnit是一套基于测试驱动开发的测试框架,包括PythonUnit、CppUnit、JUnit。JUnit使用断言机制,与预期结果进行比对。原则测试方法上必须使用@Test进行修饰测试方法必须使用public void 进行修饰,不能待

2022-02-02 16:36:25 50

原创 Jetpack学习之 LiveData,Context都没弄明白凭什么拿高薪

除了使用 postValue(),还可以使用 setValue(),区别是后者必须在主线程调用。如果需要在子线程中更新 LiveData, 可以使用 postValue 方法。2.2 更改 LiveData 中的数据2.2.1 Transformations.map 方法和 RxJava 一样,我们可以对数据分发到指定对象之前,给它map一下,转化成另一种数据,比如下面代码,LiveData 原数据是 Int 型, 通过 map 转化成 String 类型(或则任何数据):override f.

2022-02-02 16:35:00 561

原创 Jetpack Compose简易入坑,开发移动app公司

效果如下:代码很简单,但是这是一个函数,用Composable修饰,就表示一个UI状态,只需要在MainActivity的onCreate()里面调用setContent()就可以:class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent { TextViewDemo() }}

2022-02-02 16:33:35 68

原创 Java 内存模型,android底层开发技术实战详解

局部变量表操作数栈动态链接返回地址2. 本地方法栈(Native Method Stack)3. 程序计数器(Program Counter Register)4.堆(Heap)Ecen区Survivor区Old区5. 方法区内存溢出与内存泄漏堆溢出内存泄露内存溢出栈溢出StackOverflowErrorOutOfMemoryError小结相关推荐Java JVM知识汇总运行时的数据区(Runtime Data Area)====================

2022-02-02 16:32:09 98

原创 io流,flutter真机调试闪退iOS

3.File类java.io.File类用于表示文件(目录),File类只用于表示文件的信息(名称,大小等)不能用于文件内容的访问第一个标识中需要介绍\符号File file=new FIle(“F:\demo”);记得是双斜杠\或者/ 还可以是File.separator,File.separator表示通用分隔符。三者功能相同**主要方法exists();判断文件/文件夹是否存在mkdir();创建文件夹 如果是多级目录用mkdirs();delete();删除文件夹判断是否是一个目录

2022-02-02 16:29:20 161

空空如也

空空如也

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

TA关注的人

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