- 博客(44)
- 收藏
- 关注
转载 android 开发日积月累,统统都会
因为够强大 而且分便,对于多人团队协作开发帮助很大。当然他们都有视图工具,记不住命令的可以用视图操作。我之前也有一篇git命令的博客 Git命令(最常用10组)开发工具开发工具一般是:android studio ,idea,eclipse 三种。android开发工具现在官方推荐 android studio 简称as,goole对外宣布停止对eclipse的支持。android studio的入门使用我写了一篇文章从零开始用android studio 入门的新手非常
2021-11-13 13:06:09
421
原创 Android 高级面试高频知识点,真牛皮
Android 高级面试经常会有很多原理分析,以及性能优化监控相关,列出一些高频知识点仅供参考。s13524801/android-interview-record 欢迎 start 以及补充Android 相关性能优化Java 相关Kotlin 相关网络相关插件化图片相关Gradle 相关Flutter 相关Android 相关Android之SharedPreferences内部原理浅析剖析 SharedPreference apply 引起的 ANR 问题Android
2021-11-10 23:50:56
1130
原创 Android 音频(一) _ 采样量化编码 & AudioRecord 录制音频
public inline fun File.outputStream(): FileOutputStream {return FileOutputStream(this)}use()是一个 Closeable 的扩展方法,不管发生了什么,最终use()都会调用close()来关闭资源。这就避免了流操作的模板代码,降低了代码的复杂度:public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {contrac
2021-11-10 23:49:01
1215
原创 Android 面试必备 - 计算机网络基本知识(TCP,UDP,移动终端开发实训总结
第二次握手:服务器端收到客户端发来的SYN,必须向客户端发送ACK包(ack=j+1=k),同时自己必须发送一个SYN包,即syn+ack,此时进入SYN_REC状态第三次握手:客户端收到服务器端发来的syn+ack包,向服务器发送ack包(ack=k+1),发送完毕,此时进入ESTABLISH状态,连接成功,完成第三次连接。发送 确认第一次:SYN=1 SEQ=X ACK=0(客)第二次:SYN=1 SEQ=Y
2021-11-10 23:47:15
1901
原创 android 清除缓存功能,嵌入式音视频开发百度云
加载一个webview 产生缓存 众所周知的webview是产生缓存的主要原因之一webview加载之后 点击按钮 查询缓存 然后清除缓存 再查询缓存 可以看到 缓存确实被清除了或者咋webview加载之后 点击按钮查询缓存 然后去设置里面应用程序 看程序的缓存是不是一样的 答案肯定是一样下面是代码DataCleanManager.javapackag
2021-11-10 23:43:39
147
原创 Android 插桩入门,android底层开发工程师
implementation localGroovy()implementation project(":BasePlugin")implementation ‘commons-io:commons-io:2.6’implementation ‘org.javassist:javassist:3.27.0-GA’implementation ‘com.google.auto.service:auto-service:1.0-rc6’kapt “com.google.auto.service:aut
2021-11-10 23:41:58
1099
原创 Android 总结:Manifest文件中,application和activity标签属性详解
android:hasCode = [“true” | “false”]android:icon = “drawable resource”android:killAfterRestore = [“true” | “false”]android:label = “string resource”android:manageSpaceActivity = “string”android:name = “string”android:permission = “string”android:per
2021-11-10 23:40:25
993
原创 Android 彻底掌握 Handler 看这里就够了,flutter下载文件
}…msg.recycleUnchecked();}}上面代码表示 loop 方法中执行了一个死循环,这也是一个 Android App 进程能够持续运行的原因。注释1:不断地调用 MessageQueue 的 next 方法取出 Message。注释2:如果 message 不为 null,则处进行后续处理。具体就是从 Message 中取出 target 对象,然后调用其 dispatchMessage 方法处理 Message 自身。target是谁?Message.targetpu
2021-11-10 23:38:12
1119
原创 Android 开发面试备战春招之“你做过那些性能优化?,字节跳动Android实习面试凉凉经
}}基于 Choreographer 回调函数 postFrameCallback 来监控基于开源框架 BlockCanary 来监控基于开源框架 rabbit-client 来监控怎么避免卡顿:一定要避免在主线程中做耗时任务,总结一下 Android 中主线程的场景:UI 生命周期的控制系统事件的处理消息处理界面布局界面绘制界面刷新…还有一个最重要的就是避免内存抖动,不要在短时间内频繁的内存分配和释放。基于这几点去说卡顿肯定是
2021-11-10 23:36:21
1169
原创 Android 常用工具类,终局之战
只要在Application 初始化即可public class AndroidUtilsApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//崩溃处理CrashHandlerUtil crashHandlerUtil = CrashHandlerUtil.getInstance();crashHandlerUtil.init(this);crashHandlerUtil.s.
2021-11-10 23:34:17
368
原创 Android Scroller简单用法,字节跳动+京东+360+网易面试题整理
mScroller.setFinalY(int newY) //设置mScroller最终停留的竖直位置,没有动画效果,直接跳到目标位置//滚动,startX, startY为开始滚动的位置,dx,dy为滚动的偏移量, duration为完成滚动的时间mScroller.startScroll(int startX, int startY, int dx, int dy) ..
2021-11-09 12:19:23
245
1
原创 Android NativeCrash 捕获与解析,androidui设计原理
使用mk文件进行编译的时候,可以增加如下命令,也可以直接编译出strip的so-fvisibility=hidden二、NE 捕获与解析===========================================================================NE解析顾名思议就是堆栈解析,当然所有的前提就是需要保存一份带符号表、也就是未被strip的so,如果你只有strip之后的so,那就无能为力了,堆栈基本无法还原了。一般有以下三种方式可以捕获和还原堆栈。2.1 l
2021-11-09 12:17:29
599
原创 Android MediaFile对常见MIME的定义,android开发视频教程百度网盘
static {/// M: Add more audio file types to maps. {@addFileType(“3GP”, FILE_TYPE_3GPP3, “audio/3gpp”);addFileType(“3GA”, FILE_TYPE_3GA, “audio/3gpp”);addFileType(“MOV”, FILE_TYPE_QUICKTIME_AUDIO, “audio/quicktime”);addFileType(“QT”, FILE_TYPE_QUICKTIM
2021-11-09 12:15:43
1558
原创 Android Library上传到JCenter仓库实践,阿里P8手把手教你
概念普及====JCenter是什么?jcenter是一个由 bintray.com维护的Maven仓库。一般我们会这样定义使用的仓库:repositories {jcenter()}Maven仓库又是什么?你可以理解为存放我们Library的文件服务器。我们在使用一些开源库的时候,可能会看到在项目根目录下的build.gradle有如下配置:allprojects {repositories {mavenCentral()}}mavenCentral又是什么?我好乱啊,我不
2021-11-09 12:13:44
387
原创 Android Jetpack架构开发组件化应用实战,互联网寒冬
宿主App没有任何的业务代码,整个业务被拆分为各个ft_lib模块。对一些功能组件进行封装抽取为lib,提供给上层依赖。ft_lib之间没有任务依赖关系,通过Arouter进行通信。首页功能首页分为5个Tab,主要为首页、项目、导航、体系和我的。整个页面框架使用BottomNavigationView + Navigation来搭建。通过menu来配置底部菜单。 通过NavHostFragment来配置各个fragment。系统提供的FragmentNavigator的navigate方法中是通过.
2021-11-09 12:12:07
124
原创 Android hook技术实现一键换肤,移动应用开发项目案例
3. 利用HOOK技术实现优雅的“一键换肤"什么是hook**如题,我是用hook实现一键换肤。那么什么是hook? hook,钩子. 安卓中的hook技术,其实是一个抽象概念:对系统源码的代码逻辑进行"劫持",插入自己的逻辑,然后放行。注意:hook可能频繁使用java反射机制···**"一键换肤"中的hook思路"劫持"系统创建View的过程,我们自己来创建View系统原本自己存在创建View的逻辑,我们要了解这部分代码,以便为我所用.收集我.
2021-11-09 12:10:26
446
原创 Android Handler源码浅析,android机器学习
原来是在两个参数的构造方法中被赋值了,调用Looper.myLooper() 拿到mLooper,然后调用mLooper.mQueue方法,也就是说mQueue是Looper的一个成员变量。以我们目前分析的源码,只知道我们把Message放入了MessageQueue中: Looper源码解析Looper初次相遇 是在Handler两个参数的构造方法中,但是Looper并不是在这里创建的,那在哪里创建的呢?一切还要从盘古开天地说起:在我们的程序启动后,经过一系列的启动流程,最终将会调用我们的A
2021-11-09 12:08:52
116
原创 Android FrameWork 面试整合题集,字节跳动面试
@Overridepublic void onCreate() {super.onCreate();Thread.setDefaultUncaughtExceptionHandler(this);}@Overridepublic void uncaughtException(final Thread thread, final Throwable ex) {new Thread(new Runnable() {@Overridepublic void run() {Looper.prep
2021-11-09 12:06:40
262
原创 android emulator虚拟设备之qemu pipe分析(三),移动app开发公司
};static int qemu_pipe_probe(struct platform_device *pdev){int err;struct resource *r;struct qemu_pipe_dev *dev = pipe_dev;PIPE_D(“Creating device\n”);INIT_RADIX_TREE(&dev->pipes, GFP_ATOMIC);/* not thread safe, but this should not happen */
2021-11-09 12:04:48
502
原创 Android App Dark Theme(暗黑模式)适配指南,android实战mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2qd7l5a-1636430548017)(https://user-gold-cdn.xitu.io/2020/3/3/1709ff5d1de5811f?imageView2/0/w/1280/h/960/ignore-error/1)]以上这张图截选自 Android 官方文档,上面提出了 Dark Theme 的三点好处:可以帮助我们节省更多的电量为弱视以及对强光敏感的用户提高可视性让所有人都可以在光
2021-11-09 12:02:44
1722
原创 2020移动互联网寒冬(Android)求职随感,移动端开发框架
要求掌握系统架构及相关技术,熟悉高级UI、framework源码,精通插件化、性能优化、Java开发经验。。。视频面试给我的第一感觉就是题太难了,薪资低也就就算了,面试要求还贼高。一面1:插件化。启动activity的hook方式。taskAffity。2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞..
2021-11-08 10:35:05
288
原创 2020最新Android知识体系总结(全方面覆盖Android知识结构,面试&进阶)
反射与类加载篇反射基本概念与ClassClassLoader与类加载器热修复类加载项目实战动态代理篇基本原理动态代理之RxJava与Retrofit应用实战高效IO篇JavaIO体系File文件操作APK加固…Android高级UI与FrameWork源码:高级UI篇WebView交互架构项目实战布局ViewGroup原理解析Material Design设计的App京东自定义view流式布局项目实战今日头条文字渐变特效项目实战.
2021-11-08 10:33:22
704
1
原创 2020年最新字节、阿里、腾讯,移动开发技术总结
3.Fragment中add与replace的区别(Fragment重叠)4.getFragmentManager、getSupportFragmentManager 、getChildFragmentManager之间的区别?5.FragmentPagerAdapter与FragmentStatePagerAdapter的区别与使用场景三、Service基础相关1.Service的生命周期2.Service的两种启动方式?区别在哪?3.如何保证Service不被杀死 ?4.能否在Servic
2021-11-08 10:23:26
162
原创 Android 程序员的技术栈大全,android开发技术论文
Activity 启动模式standardsingleTopsingleTasksingleInstance常用的布局控件RecyclerViewConstraintLayoutWebView…数据存储SharedPreferencesFileSQLiteRealm线程异步ThreadAsyncTaskIntentService线程池IPCIPC 方式Bundle文件..
2021-11-07 22:24:21
462
原创 Android 程序员的技术栈大全(1),中高级Android面试题目汇总解答
BufferedReaderInputStreamReaderFileReaderStringReaderPipedReaderCharArrayReaderFilterReaderPushbackReaderWriterBufferedWriterInputStreamWriterFileWriterPrintWriterStringWriterPipedWriterCharArrayWriterFilte..
2021-11-07 22:22:27
727
原创 Android 知识简记 快速回顾各种知识,跨平台移动开发答案
A:你能听到吗?B:我能听到,你能听到吗?A:我能听到,开始吧A 和 B 两方都要能确保:我说的话,你能听到;你说的话,我能听到。所以需要三次握手TCP 四次挥手A:我说完了B:我知道了,等一下,我可能还没说完B:我也说完了A:我知道了,结束吧B 收到 A 结束的消息后 B 可能还没说完,没法立即回复结束标示,只能等说完后再告诉 A :我说完了。POST 和 GET 区别Get 参数放在 url 中;Post 参数放在 request Body 中Get 可能不安全,因为参数放在 u
2021-11-07 22:21:01
105
原创 Android 知识梳理目录 - 好吧,这是一个很“干“的标题
Android 数据存储知识梳理(1) - SQLiteOpenHelper 源码解析Android 数据存储知识梳理(2) - Android存储目录Android 数据存储知识梳理(3) - SharedPreference 源码解析Android 数据存储知识梳理(4) - 数据库升级操作的处理策略2.7 状态栏Android 状态栏知识点总结2.8 广播Broadcast 知识梳理(1) - BroadcastReceiver 基本概念2.9 ServiceService 知
2021-11-07 22:19:09
163
原创 Android 深入Http(1)HTTP原理和机制,这份资料可帮你解决95%的问题
从OkHttp的角度(源码)看Http原理从Retrofit的角度(源码)看Http原理学习的内容来源于网上各个blog和一些源码(从我这里看到的,别人那里也能看到,但是我尽量整理的更详细一点,争取一个系列来加深我们对Http的印象)。Ok,直接进入我的学习。Http的原理和机制==========================================================================Http是什么http是超文本传输协议(HyperTex..
2021-11-07 22:17:32
180
原创 Android 数据库框架ormlite 使用精要,安卓面试问题
TableUtils.createTable(connectionSource, Img.class);} catch (SQLException e) {e.printStackTrace();}}/**这里进行更新表操作*/@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion,int newVersion) {
2021-11-07 22:13:17
386
原创 Android 开机应用扫描,高级Android开发面试题
答案是按照路径,对于手机用户安装应用都是放在/data/app,对于系统应用则是分布各个分区中,可以简单的认为是目录,/data就是data分区,以下的分区都会被扫描,并且只会扫描priv-app和app目录:system分区下的priv-app,app目录/system/priv-app, /system/appproduct分区odm分区oem分区vendor分区system_ext分区data分区,最后扫描不过这些分区都执行不是特别严格,没涉及到gms.
2021-11-07 22:11:41
281
原创 Android 圆形头像的两种实现方式,移动端跨平台框架
前言这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的。圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式:第一种: 使用 Paint 的 Xfermode 实战第二种方法: 使用 BitmapShader 实现第一种: 使用 Paint 的 Xfermode 实战圆形头像,我们可以看成是 在原图上面绘制一个圆,再取交集。从代码的角度来讲,先绘制 Dst,再绘制 Src,显示的区域是二者交集,由此可知 SrcIn 符合我们的要求
2021-11-07 22:09:51
395
原创 Android 后台保活,这里有你需要的所有姿势。2019,最新版本
老规矩,先上项目地址: https://github.com/wangshihu123/DaemonLibrary 结合网上各路大神及自己的项目保活实战(在此不方便透露项目),给出了最新的保活姿势。(如有雷同,纯属巧合)1.为什么要做 Android 保活?首先我个人并不推荐也不喜欢手机应用通过各种手段后台保活,当我们确定一定以及肯定地需要这个功能的时候,也就只能硬着头皮去与各个手机的后台管理机制做斗争了。(一句话,产品需求呗)2.故事背景我们的需求是:开启户外运动,需.
2021-11-07 22:08:12
1468
原创 Android Gradle进阶配置指南
}buildTypes{release {//应用myConfigsigningConfig signingConfigs.myConfigminifyEnabled trueproguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.txt’}}签名配置:storeFile : keystore文件storePassword : 密码keyAlias : 别名keyPassword
2021-11-06 14:46:37
529
原创 Android Framework学习笔记(六)应用程序进程启动过程
private static ProcessStartResult zygoteSendArgsAndGetResult(ZygoteState zygoteState, ArrayList args) throws ZygoteStartFailedEx {try {// Throw early if any of the arguments are malformed. This means we can// avoid writing a partial response to the zygo
2021-11-06 14:44:41
439
原创 Android Framework学习笔记(五)应用程序启动过程
因为AMS继承了AMN,服务端真正的实现是在AMS中,注释1最终会调用AMS的startActivity方法。ActivityManagerService#startActivity()@Overridepublic final int startActivity(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho
2021-11-06 14:42:56
243
原创 Android ExpandableListView折叠菜单的三层嵌套实现
先说下,因为是三级嵌套,所以需要四个布局文件,Activity 页面本身需要一个布局文件,然后就是三级嵌套的三个布局文件。Activity 布局文件<?xml version="1.0" encoding="utf-8"?>我们可以通过 ExpandableListView 的默认属性来控制部分样式,这里贴上菜鸟教程的属性图片一级菜单布局文件<?xml version="1.0" encoding="utf-8"?><androidx.constr.
2021-11-06 14:41:01
473
原创 Android AsyncTask源码解析
protected Boolean doInBackground(Void… params) {try {while (true) {int downloadPercent = doDownload();publishProgress(downloadPercent);if (downloadPercent >= 100) {..
2021-11-06 14:39:21
113
原创 Android ANR:Application Not Responding详解
日志关键字:Timeout of broadcast BroadcastRecordServiceTimeout —— Service在特定的时间内未处理完成导致ANR发生。(限制:前台服务20s;后台服务200s);日志关键字:Timeout executing serviceContentProviderTimeout —— 内容提供者,在10s内未处理完成导致ANR发生;日志关键字:`Timeout publishing conte《Android学习笔记总结+最新移动架.
2021-11-06 14:36:58
136
原创 android Activity的Task Affinity lanchMode
l FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDl FLAG_ACTIVITY_SINGLE_TOP主要的属性有:l taskAffinityl launchModel allowTaskReparentingl clearTaskOnLaunchl alwaysRetainTaskStatel finishOnTaskLaunch默认情况下,一个应用程序中的所有activity都有一个affinity–这让它们属于同一个task。然而,每个activity可以通过
2021-11-06 14:35:16
214
原创 Android 6
CALENDAR(日历)* READ\_CALENDAR* WRITE\_CALENDARCAMERA(相机)* CAMERACONTACTS(联系人)* READ\_CONTACTS* WRITE\_CONTACTS* GET\_ACCOUNTSLOCATION(位置)* ACCESS\_FINE\_LOCATION* ACCESS\_COARSE\_LOCATION..
2021-11-06 14:33:02
156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人