- 博客(42)
- 资源 (3)
- 收藏
- 关注
原创 Android常见问题-科普一下面试中常问的音视频基础知识
一本静态的小人书,通过翻动以后,就会变成一个有趣的小动画,如果画面够多,翻动速度够快的话,这其实就是一个小视频。而视频的原理正是如此,由于人类眼睛的特殊结构,画面快速切换时,画面会有残留,感觉起来就是连贯的动作。所以,视频就是由一系列图片构成的。音频数据的承载方式最常用的是脉冲编码调制,即PCM。在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把声音数字化,即转换为数字信号。我们知道声音是一种波,有自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。
2024-05-24 15:47:33
758
原创 【Android常见问题(六)】- UX标注色值带有百分比的使用方法
a,将透明度转换成不透明度。不透明度为:60% b,不透明度乘以255。我们得到结果:153 c,将计算结果转换成16进制。得到最终的不透明度:99 d,将不透明度和颜色值拼接成ARGB格式。得到最终的颜色值: #99FFFFFF 所以,UI要的颜色是:#99FFFFFF。如果UI给的视觉稿标注是:颜色#FFFFFF,透明度40%。需要不透明度值的,可以自己算:透明度值 + 不透明度值 = 100%
2023-09-13 09:27:35
461
原创 【Android Framework (十二) 】- 智能硬件设备开发
针对我过往工作经历,曾在一家智能科技任职Android开发工程师,简单介绍下关于任职期间接触和开发过的一些项目经历,智能多与物联网(LOT)进行联系,从对Android智能硬件一无所知到现在算是略有小成,期间踩了很多坑,也接触到了许多非Android方面的知识,现用文章的方式将之记录下来,与大家分享。提到智能硬件其实属于物联网(LOT)的范畴,关于智能硬件的定义,以我理解的角度来看,首先这是一个不同于移动手机的硬件,它本质还是一个可触碰的实质物体;
2023-08-15 18:48:42
1208
1
原创 【Android常见问题(五)】- Flutter项目性能优化
项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。通过 Flutter 应用的混淆为入口,我们主要探讨了UI 渲染的优化。其中就会涉及到一个非常关健的概念 ——「FPS,Frame Per Second」即「每秒展示帧数」,它代表了应用的流畅度。我们知道,动画和物体动态的运动都是由在一段时间内一系列连续变化的静态帧构成的。在考虑应用的渲染性能时,我们就是在试图分析应用每秒渲染的帧数。
2023-07-27 15:57:33
736
原创 Mac使用手册 - WeChatTweak微信撤回拦截与多开工具
WeChatTweak是一款macOS 客户端微信撤回拦截与多开工具,支持阻止消息撤回、客户端多开等等功能,不过目前不支持最新版本的微信3.8.1,可以下载微信3.8.0版本替换即可实现查看微信撤回的消息等等功能了,撤回后的消息是高亮显示的,可以在设置自定义,还支持支持 Alfred workflow、Launchbar action等等,感兴趣的同学可以试试。阻止消息撤回消息列表通知系统通知正常撤回自己发出的消息客户端无限多开右键 Dock icon 登录新的微信账号。
2023-07-14 08:00:00
1920
原创 Mac使用手册 - brew 命令的安装
从Ubuntu系统切换到Mac os系统,常用的命令工具发生了变化,比如brew的命令安装如下。命令安装运行命令,输入序列号时 直接回车输入大写字母:Y输入mac密码,运行脚本等待安装完成即可安装成功 但还需要重启终端 或者 运行 source /Users/mac/.zprofile 否则国内地址无法生效brew -v 验证。
2023-07-13 16:05:21
1672
原创 【Android 碎屑日记(二)】- Jetpack Compose
Compose是一个用于替代Android View的全新声明式UI框架声明式编程(英语:Declarative programming)或译为声明式编程,是对与命令式编程不同的编程范型的一种合称。它们建造计算机程序的结构和元素,表达计算的逻辑而不用描述它的控制流程。指令式编程(英语:Imperative programming);是一种描述电脑所需作出的行为的编程范型。几乎所有电脑的硬件都是指令式工作;几乎所有电脑的硬件都是能执行机器语言,而机器代码是使用指令式的风格来写的。
2023-07-12 08:00:00
124
原创 【Android 碎屑日记(一)】- Android 14 重要的 8 个新特性
一年一度的 Android 升级永不缺席,今年的代号叫 Upside Down Cake,倒置蛋糕,简称 U,对外版本为 Android 14。升级任务分为 ROM 角度和 App 角度,前者比较关心系统内部实现的变化,后者则更加关心对外的 New Features 和 Behavior Changes。14 推出的新 API,大部分我都试过,并开源了 DEMO。ScreenShot Detection,截屏感知TextView Highlight,文本高亮。
2023-07-11 15:27:12
763
原创 【Android Framework (十一) 】- InputManagerService
InputManagerService是一个系统服务,主要处理Input事件的传递,包括键盘、鼠标、触摸屏等等,它和WMS密切相关。
2023-07-04 08:00:00
259
原创 【Android Framework (十) 】- ContentProvider
ContentProvider是Android的四大组件之一,虽然他没有Broadcast和Service用的频繁。ContentProvider的作用是不同应用之间数据共享,提供一个统一的接口。例如我们我想让其他应用使用自己的数据 就需要使用ContentProvider。1.获取ContentProvider。
2023-07-02 15:42:50
262
原创 【Android 常见问题(一)】- HashMap & ConcurrentHashMap
CAS 是一条CPU并发原语。这样当获取一个不存在的 key 时,计算出的 index 正好是环形链表的下标就会出现死循环:在 1.7 中 hash 冲突采用的头插法形成的链表,在并发条件下会形成循环链表,一旦有查询落到了这个链表上,当获取不到值时就会死循环。1.8 在 1.7 的数据结构上做了大的改动,采用红黑树之后可以保证查询效率(O(logn)),甚至取消了 ReentrantLock 改为了 synchronized,这样可以看出在新版的 JDK 中对 synchronized 优化是很到位的。
2023-07-02 15:18:20
253
原创 【Android 常见问题(四)】-kotlin
在上面的代码中,我们定义了一个 User 类,并使用 by lazy 关键字定义了一个 name 属性,该属性在第一次被使用时会进行初始化。其中,ClassName 表示要添加方法的类名,methodName 表示方法名称,parameters 表示方法参数列表,方法体中的代码可以使用该类中的属性和方法。需要注意的是,扩展函数是静态解析的,即在编译期间就决定了哪个函数会被调用,因此如果在同一个类中存在与扩展函数同名的成员函数,那么编译器会优先选择成员函数。主构造函数可以包含参数,访问修饰符和注解等元素。
2023-05-11 22:20:52
495
4
原创 【Android 常见问题(三)】- flutter及常见问题分析
当初始化一个 Channel,并向该 Channel注册处理消息的 Handler 时,实际上会生成一个与之对应的 BinaryMessageHandler,并 以 channel name 为 Key,注册到 BinaryMessenger 中。两个Isolate完全是两条独立的执行线,且每个Isolate都有自己的事件循环,它们之间只能通过发送消息通信,所以它的资源开销低于线程。在项目中,可能会有很多没有被使用到的资源文件,这些资源文件会占据 APK 的空间,并且在启动时也会增加资源解析的时间。
2023-05-11 22:10:09
608
原创 【Android 常见问题(二)】- 常见算法题
a. 首先将查找表分成若干块,在每一块中数据元素的存放是任意的,但块与块之间必须是有序的(假设这种排序是按关键字值递增的,也就是说在第一块中任意一个数据元素的关键字都小于第二块中所有数据元素的关键字,第二块中任意一个数据元素的关键字都小于第三块中所有数据元素的关键字,依次类推);冒泡排序是一种简单的排序算法。1、基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;c. 查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素存放在哪个块中,查找方法既可以是折半方法,也可以是顺序查找。
2023-05-11 16:58:11
110
原创 【Android常见问题(二)】-进程和线程的区别
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。2、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
2023-05-10 00:24:09
144
原创 【Android Framework (九) 】- Broadcast
Broadcast是一个很简单的组件,它是我们应用程序之间传输信息的一种机制。BroadcastReceiver是用来接收来自系统和应用的广播 并对其做出相应的组件,我们发送广播是通过Intent,在Intent中我们可以带我们需要传递的数据。广播的注册:1.静态注册(AndroidManifest中使用receiver标签) 2.动态注册 registerReceiver方法。发送广播:sendBroadcast动态注册。
2023-05-07 01:01:03
657
原创 【Android Framework (八) 】- Service
1,挂载文件系统,创建文件目录 调用selinux_setup权限安全相关2,初始化内存空间 初始化属性服务 创建Epoll 注册监听子进程重启异常操作等,对子进程进行线程守护3,startPropertyServic 开启属性服务 进行监听4,LoadBootScripts 加载init.rc文件 进行解析 调用do_class_start 文件开启service5,Service::Start函数->fork子进程->并且执行app_process文件,开启了zygote1,startVm函数注
2023-04-26 08:00:00
535
原创 【Android Framework (七) 】- ActivityManagerService(AMS)
ActivityManagerService,它是Android系统的核心,它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。它除了管理四大组件外,同时也负责管理和调度所有的进程。分两种情况,进程未存在,进程已存在。
2023-04-25 08:00:00
598
原创 【Android Framework (六) 】- Launcher
Android系统启动的最后一步是启动一个桌面应用,这个应用用来显示我们已经安装的应用程序,它就是Launcher//判断是否需要开机动画 ALOGI_IF(noBootAnimation , "boot animation disabled");if(!//等待SurfaceFlinger 因为我们想要画到屏幕上就必须要通过SurfaceFlinger //调用run函数 boot -> run("BootAnimation" , PRIORITY_DISPLAY);
2023-04-24 01:30:00
374
原创 【Android FrameWork(五)】- ServiceManager
接上一篇文章service_mananger就四个重要的:1.binder_open:打开binder驱动,对BINDER_VERSION进行校验2.binder_become_context_manager:设置自己成为binder上下文的管理者(binder_context_mgr_node)3.binder_loop:给Binder驱动发送BC_ENTER_LOOPER,以及循环读取内容 调用binder_parse解析。
2023-04-23 07:00:00
527
原创 【Android FrameWork(四)】- binder & service_manager & ServiceManager
ServiceManager是Android系统为开发者提供的一个服务大管家,当开机之后,由内核态进入用户态之后,会启动system_server进程,在该进程里面会对AMS,PKMS,PMS等等进行创建。然后添加到ServiceManager中。SystemServer算是一个大管家,他整合了系统的各种服务,监控着我们服务,管理服务的周期。而ServiceManager只有一个功能就是提供binder通信,让应用可以获取到系统提供的服务。
2023-04-22 22:54:37
403
原创 【Android FrameWork (三)】- SystemServer
Android系统在启动的时候有两个非常重要的进程,Zygote。SystemServer是系统用来启动service的入口,比如我们常用的AMSWMSPMS等都是由它创建的。SystemServer主要是创建SystemServiceManager,对系统服务进行创建、启动以及管理。
2023-04-21 01:45:00
415
原创 【Android FrameWork (二) 】- Zygote
通过知识回顾我们了解到 Zygote是init的子进程,Zygote是一个孵化器,system_server和所有的应用程序都是由他创建出来的。最初的时候Zygote进程的名称并不是Zygote而是app_process,Zygote启动后,Linux系统下的pctrl系统会调用app_process,所以把名称换成了Zygote。Zygote他是一个C/S架构。Zygote进程作为服务端,通过Socket的方式和其他进程进行通信。
2023-04-20 01:30:00
124
原创 【Android 常见问题(五)】- Android 冷启优化
为了提高App的冷启动耗时,除了在常规的业务侧进行耗时代码优化之外,为了进一步缩短启动耗时,需要在纯技术测做一些优化探索,本期我们从类预加载、Retrofit 、ARouter方面进行了进一步的优化。从测试数据上来看,这些优化手段的收益有限,可能在中端机上加起来也不超过50ms的收益,但为了冷启动场景的极致优化,给用户带来更好的体验,任何有收益的优化手段都是值得尝试的。
2023-04-19 09:10:33
188
转载 我的Android进阶之旅------>解决:debug-stripped.ap_' specified for property 'resourceFile' does not exist.
1.错误描述更新Android Studio到2.0版本后,出现了编译失败的问题,我clean project然后重新编译还是出现抑郁的问题,问题具体描述如下所示:Error:A problem was found with the configuration of task ':watch:packageOfficialDebug'.> File 'D:\Code\XTC_Ver
2016-10-31 14:55:32
474
原创 Android Studio--Gradle配置详解
build.gradle完整源码第一步奏,打开app moder中的 build.gradle 文件/*** 常量定义*/def AppPackageName="com.apkdemo.demo";/* 包名:必须改当前包名 */def AppSigningKey="/Users/oscar/Desktop/TestApkKey/gradledemo.jks";/* APK 签名key文件
2016-06-20 18:25:29
503
原创 Android Studio--Gradle基础
什么是Gradle?Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。安装Gradle在新建项目成功后会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的Gradle到什么地方呢? Mac上会默认下载到 /Users/<用户名>/.gra
2016-06-20 18:17:39
215
原创 Android Studio-gradle无法下载解决方案
第一步 上官网手动下载 1>官网地址 http://gradle.org/ 2> 注意:如果下载不了 请复制浏览器上的链接 https://downloads.gradle.org/distributions/gradle-2.2.1-all.zip 通过迅雷等第三方工具下载第二步 将下载下来的 gradle-2.2.1-all.zip 上传到云盘或者服务器 1> 我的
2016-06-20 18:08:29
3067
1
原创 Android Studio-快捷键
Android Studio 1.0 终于发布了正式版官方下载地址: http://developer.android.com/sdk/index.html 如果你之前已经使用其他版本的Studio,那么直接覆盖就好了,如果是第一次使用,那么参照Android 教程一进行安装配置。 于此同时一起更新的还有SDK Tools等,打开SDK Manager进行更新就OK。如果之前有在使用RC版本的S
2016-06-16 12:18:00
342
原创 Android Studio-引入jar包及so文件
一、引用jar文件 1.将jar文件复制、粘贴到app的libs目录中; 2.右键点击jar文件,并点击弹出菜单中的“Add As Library”,将jar文件作为类库添加到项目中; 3.选择指定的类库。 注:如果不执行2、3步,jar文件将不起作用,并且不能使用import语句引用。 二、引用so文件 网上有很多引用so文件的方法,
2016-06-16 12:12:03
475
原创 Android Studio-SVN代码下载,提交,冲突解决方案
1.安装 TortoiseSvn 服务器端 下载地址http://tortoisesvn.net/downloads.html 1.1>1.8以上版本安装时注意 注:可选择安装中文包1.2> 桌面右击出现svn选项说明安装成功 2 配置Android Studio SVN 2.1>选择File 2.2>选择Setting 2.3>选择Version Cont
2016-06-16 12:09:13
1067
原创 Android Studio-常见错误解决方案
1.第一次启动android studio时无法下载sdk解决方案 打开Android Studio安装目录下 idea.properties文件夹 在文件最后添加 disable.android.first.run=true 例如: C:\zhangwei\Tools\android-studio\bin\idea.properties2.gradle无法下载解决方案参照 An
2016-06-16 11:44:21
602
转载 debug.keystore文件不存在解决办法
重装系统之后,丢失了debug.keystore,找了很久都没有找到,根据网上所讲的只要重新运行一个Android项目;就会在avd中生成一个新的debug.keystroe,此法也没解决,索性直接重新生存一个key。 在cmd下,进入C:\Users\Administrator\.android目录执行命令如下: keytool -genkey -
2016-05-26 17:21:00
6897
原创 Android WebView使用及苏宁易付宝支付相关问题
最近项目中应用到苏宁易付宝支付方式 项目中遇到了一些问题总结如下:易付宝使用处理的逻辑代码:public class YiFuBaoWebView extends BaseActivity implements View.OnClickListener { /*post请求的参数*/ private String mPostParam; /*加载的webview的
2015-11-26 12:05:32
813
1
原创 Android百度地图导航SDK2.0 定位SDK6.0.5的导航参数设置方法
现在的导航SDK2.0的导航发起函数如下 public boolean launchNavigator(Activity activity, java.util.List nodes, int preference,
2015-11-16 14:20:51
1102
原创 Android 自动弹出\关闭软键盘
应用场景:在页面UI中含有密码输入框或者是需要输入某些文字的控件的时候,弹出dialog同时自动弹出键盘,编辑后点击取消或者是完成直接关闭,或者是点击物理back键时自动隐藏掉软键盘。 /** 软键盘自动弹出 */ inputManager = (InputMethodManager) context .getSystemService
2015-11-03 11:02:38
1124
原创 android studio/IntelliJ IDEA SVN无法正常使用问题
AS 工具报错: svn: E204899: Cannot run program "svn" (in directory "G:\code\langchao\.idea"): CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ 。起初怀疑是因为IDEA不支持1.8版本,于是卸载1.8换上1.7。换成1.7后还是不
2015-09-27 21:03:20
4046
转载 adb logcat 查看日志
使用 logcat 命令 查看和跟踪系统日志缓冲区的命令logcat的一般用法是:[adb] logcat [option>] ... [filter-spec>] ... 下文介绍过滤器和命令选项,详细内容可参见Listing of logcat Command Options。 可以在开发机中通过远程shell的方式使用logcat命
2015-09-24 18:05:08
1580
转载 Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影。 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚接触的人来说可能太少了,下面我就把我使用过程中所知道的写了下来,希望可以帮助自己和别人更深入了解这个库的使用和配置。 GITHUB上的下载路径为:htt
2015-09-24 18:03:25
314
universal-image-loader-1.9.2.jar
2015-09-24
contentprovider
2014-12-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人