![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 85
m0_66640396
这个作者很懒,什么都没留下…
展开
-
android中的深度学习——快速风格迁移
=============这是一个图片处理APP,里面使用了Opencv、深度学习、MVVM、Databinding、RxJava、各种设计模式等等,在后面一段时间我会写一系列博客来一步步剖析这个项目,希望大家能多多关注。效果==缺点==《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】1.没有组件化2.没有混淆3.有些地方抽象不够深度学习和神经网络的基本概念==============原创 2022-04-29 13:58:17 · 2549 阅读 · 0 评论 -
Android中的StrictMode简介
.build());当然,以上代码只应在未发布上线的测试版本的应用中运行以方便监视相关的运行情况,当在生产版本上时不应该启用strictmode。因此,最佳的代码实践应该为如下的样子:public void onCreate() { if (DEVELOPER_MODE) {StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder().detectDiskRe原创 2022-04-29 13:56:36 · 501 阅读 · 0 评论 -
Androidx-下-Fragment-懒加载的新实现,新老方案对比,你喜欢哪种呢-
}复杂 Fragment 嵌套的情况当然,在实际项目中,我们可能会遇到更为复杂的 Fragment 嵌套组合。比如 Fragment+Fragment、Fragment+ViewPager、ViewPager+ViewPager….等等。如下图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZW7l48kv-1651211677559)(//upload-images.jianshu.io/upload_images/2824145-f7f0a97b856f52b原创 2022-04-29 13:54:56 · 1003 阅读 · 0 评论 -
Android-超好用的播放器——ijkplayer
/**视频文件地址*/private String mPath = “”;private SurfaceView surfaceView;private VideoPlayerListener listener;private Context mContext;public VideoPlayerIJK(@NonNull Context context) {super(context);initVideoView(context);}public VideoPlayerIJK(@N原创 2022-04-29 13:53:16 · 1261 阅读 · 0 评论 -
Android-第十三节02SharedPreferences详解
[](()一、SharedPreferences概述====================================================================================实际上sp数据也是存在data/data/包名下面,他会创建一个特殊类型的文件,然后再往里面写SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了string,set, int, long, float, boole.原创 2022-04-29 13:51:27 · 251 阅读 · 0 评论 -
Android-性能优化------启动优化
缺点:很明显,对代码侵入性非常的大,如果说我想要打出每一个任务花费的时间,那么代码看起来就很恶心了5、优雅获取方法耗时5.1 AOP Aspect Oriented Programming 面向切面编程AOP:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。它的核心思想就是将应用程序中的业务逻辑处理部分同对其提供通用服务部分即“横切关注点”进行分离。OOP:引入封装,继承,多态等概念来建立一种对象层次结构,它允许开发者定义纵向的关系,但并不适合横向的关系。可以说AOP是OOP的一种原创 2022-04-29 13:49:48 · 91 阅读 · 0 评论 -
Android-怎么就不卡了呢之Choreographer
break;case MSG_DO_SCHEDULE_CALLBACK://postCallbackDelayedInternal()方法中当未到期的时候发送过来的doScheduleCallback(msg.arg1);break;}}}以上代码我们可以看出这个,FramHandler拿到 whate属性值为MSG_DO_SCHEDULE_CALLBACK的时候会去执行 doScheduleCallback(msg.arg1);方法,跟进去看下1.3 Choreography#doSch原创 2022-04-29 13:48:01 · 321 阅读 · 0 评论 -
Android-开发面经,历时两月斩获BAT+头条四个公司-Offer(1)
这次求职中,比较高频的题目是"第 TopK 大的数"(快排思想、能提到线性查找算法 BFPAT 更佳) 和 “前 TopN 个数” (堆排序、先分治再堆排序)。2.2 技术基础就像面试前我们准备的,基础题基本是必问的,就算不深究 Android 的基础,问你一些计算机网络的东西不为过吧。这块我们必须拿出校招时的劲头来,老老实实复习。至于具体的题目什么的我就不罗列了,网上有一堆面经,github 上也有很多整理好的题库。对 Android 开发来说,可以分成两块,第一块是 Android 相关基础。**原创 2022-04-29 13:43:34 · 1575 阅读 · 0 评论 -
Android-冷门知识点汇总:你知道哪些Android中的冷门知识?
import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.os.Build;import android.os.Handler;import android.os.Looper;import android.view.WindowManager;import java.lang.reflect.Method;public原创 2022-04-29 13:41:04 · 93 阅读 · 0 评论 -
AndroidAnnotation
public Button btn;@Click(R.id.btn)void myClick(){Toast.makeText(this,“AndroidAnnotations”,Toast.LENGTH_SHORT).show();}}//还可以对多个按钮注解点击事件@Click({R.id.button1,R.id.button2,R.id.button3})void buttonClicked(Button btn){switch(btn.getId()){case R.id.bu原创 2022-04-28 12:19:54 · 2600 阅读 · 0 评论 -
Android-高级-UI-进阶之路-(二)-深入理解-Android-8-0-View-触摸事件分发机制
3. onTouchEvent(MotionEvent ev)在第一个方法中调用,用来处理点击事件,返回结果表示是否消耗此事件,如果不消耗,当前 View 就无法再次接收到事件。下面我画了一个图来具体说明下上面 3 个方法之间的关系[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5JySCvEW-1651119468397)(https://upload-images.jianshu.io/upload_images/22976303-cf0bec69ec64b54c.p原创 2022-04-28 12:18:07 · 143 阅读 · 0 评论 -
Android-自定义点选文字验证
setMeasuredDimension(width, height);/根据画布尺寸生成相同尺寸的背景图/newBgBitmap = clipBitmap(bgBitmap, width, height);/根据新的背景图生成填充部分/srcBitmap = createSmallBitmap(newBgBitmap);}设置画笔的混合模式,生成一张自定义形状的图片供填充部分使用public Bitmap createSmallBitmap(Bitmap var) {Bitmap bitm原创 2022-04-28 12:16:06 · 152 阅读 · 0 评论 -
Android-模块化-面向接口编程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M5paLqgu-1651119235346)(https://upload-images.jianshu.io/upload_images/24216715-25807c8cb942bb8e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]模块的划分模块可分为多种类型,一般分为:三方的基础 SDK (网络请求,地图导航,推送等);自己平台的通用功能(网络请求的能原创 2022-04-28 12:14:14 · 366 阅读 · 0 评论 -
Android-春招-面试经历-2019年
感觉不擅长互动较少的电话面,很难快速暖场,问题回答确实不好。当时还在复习的初级阶段内容都没看完,也是一部分原因,基本算是草草收场吧。问得比较多的是优化相关的问题。2. 支付宝(海外版)仍是电话面的,还是没有找到感觉,回答不在状态。最后猎头反馈的本次面评是:过往项目功能较简单、某些技术细节掌握不到位。算是浪费了机会。3. 今日头条是所有参加的面试里比较专业的面试体验吧,面试官体现了很好的技术素养。总共参加了3轮视频面试(技术面全部面完),开始还以为很有希望(感觉面得不错,基本没有阻塞的知识点),最终结原创 2022-04-28 12:12:09 · 157 阅读 · 0 评论 -
Android-性能优化------启动优化
package com.noahedu.myapplication;import android.app.Application;import android.os.Debug;import android.util.Log;/**@Description: java类作用描述@Author: huangjialin@CreateDate: 2020/7/10 9:59*/public class MyApplication extends Application {@Overrid原创 2022-04-28 12:10:26 · 170 阅读 · 0 评论 -
Android-9-0中的新功能---PrecomputedText
public void setTextFuture(@NonNull Future future) {this 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 .mPrecomputedTextFuture = future;this.requestLayout();}protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {this.co原创 2022-04-28 12:08:39 · 161 阅读 · 0 评论 -
Android 面试之开源库面试题
从以上的源码分析可知:判断当前的连接是否可以使用:流是否已经被关闭,并且已经被限制创建新的流;如果当前的连接无法使用,就从连接池中获取一个连接;连接池中也没有发现可用的连接,创建一个新的连接,并进行握手,然后将其放到连接池中。在从连接池中获取一个连接的时候,使用了 Internal 的 get() 方法。Internal 有一个静态的实例,会在 OkHttpClient 的静态代码快中被初始化。我们会在 Internal 的 get() 中调用连接池的 get() 方法来得到一个连接原创 2022-04-28 12:07:00 · 269 阅读 · 0 评论 -
Android 自定义View之展开收起的Layout
//是否展开,默认展开private var isOpen = true//第一个子view的高度,即收起保留高度private var firstChildHeight = 0//所有子view高度,即总高度private var allChildHeight = 0/**动画值改变的时候 请求重新布局*/private var animPercent: Float = 0fconstructor(context: Context) : super(context) {initV原创 2022-04-28 12:04:40 · 445 阅读 · 0 评论 -
Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
谈到优化,首先第一步,肯定是把一个大功能,拆分成一个个细小的环节,再单个拎出来找到可以优化的点,App 的网络优化也是如此。在 App 访问网络的时候,DNS 解析是网络请求的第一步,默认我们使用运营商的 LocalDNS 服务。有数据统计,在这一块 3G 网络下,耗时在 200~300ms,4G 网络下也需要 100ms。解析慢,并不是 LocalDNS 最大的问题,它还存在一些更为严重的问题,例如:DNS 劫持、DNS 调度不准确(缓存、转发、NAT)导致性能退化等等,这些才是网络优化最应该解决的问原创 2022-04-28 12:02:43 · 1457 阅读 · 1 评论 -
Android程序员:“如何详解 Activity 的生命周期
**针对这些情况,国内各大手机厂商都会针对Android有不同程度的定制与优化。**这可能会导致那些一般情况的理论与实际有所不同。比如系统有Low Memory Killer(低内存杀手),在手机内存比较紧张时会强杀应用,这也会导致Activity挂了,这是Android自带的机制。对于厂商,比如灭屏杀进程,那么这就可能导致按下电源键,Activity的生命周期就玩完了;另外,现在大多数App,拦截返回键功能,使其与home键效果一致,那么不排除有对返回键的极端优化情形。(三) 横竖屏切换在未做任何处原创 2022-04-27 13:36:11 · 79 阅读 · 0 评论 -
Android最强进程保活黑科技实现原理解密及方法
启动Service:mRemote.transact(transactCode, mServiceData, null, 1);在 native 层进行 binder 通信在Java层做进程复活的工作,这个方式是比较低效的,最好的方式是在 native 层使用纯 C/C++来复活进程。方案有两个。其一,维术大佬给出的方案是利用libbinder.so, 利用Android提供的C++接口,跟ActivityManagerService通信,以唤醒新进程。Java 层创建 Parcel (含 In原创 2022-04-27 13:34:13 · 718 阅读 · 0 评论 -
Android性能优化——数据库优化及其对比
}}3、建立索引(这个我觉得没必要说了,所有数据库查询时索引都会有帮助)简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率。(1). 优点大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。(2). 缺点索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改原创 2022-04-27 13:31:57 · 365 阅读 · 0 评论 -
Android性能优化–Systrace工具
cd / path-to-traces-on-my-dev-machine && \systrace –from-file trace-file-name .ctrace但是需要[systrace](()命令行程序报告分析====Systrace生成包含一系列部分的输出HTML文件。该报告列出了每个进程的线程。如果给定线程呈现UI帧,则报告还指示沿时间线的呈现帧。当在报告中从左向右移动时,时间会向前传递。报告从上到下包含以下部分UI交互活动第一部分包含表示应用或游.原创 2022-04-27 13:30:11 · 338 阅读 · 0 评论 -
Android开发:如果有选择,千万别去外包
使用适当的方法摘掉这些标签才能行走的更畅快 !!![](()公司类型================================================================项目外包主要经济来源就是不同的软件项目,所以能尽快收到钱就是唯一的目的,项目尽快收尾交付,客户付款。为什么很多做互联网的攻城狮看不起外包公司技术人员?因为外包开发的软件的生命周期对公司来说,交付客户就结束了,不像产品一样需要不停的升级和迭代,所以你很难体会到大牛们所说的扩展呀,灵活呀之类的好处了,况且要设原创 2022-04-27 13:28:11 · 122 阅读 · 0 评论 -
Android开发者进退两难的出路:转行或进阶?
3、在开发框架和效率上做文章。举个例子,很多程序员说自己的精力都在和产品的撕逼中浪费了,但有没有想过,能够通过技术手段将自己从繁杂的无技术含量的工作中解救出来?比如是否能够做到只编写一次代码,或者改个配置参数就能够做到在不同平台上运行。更高的要求是,能否将这些方案做成通用框架或产品。温水煮青蛙,我们停留在初级阶段的程序员尤其是大龄程序员就是这个里面的青蛙。以上几个阶段看着容易,但需要我们很大的勇气和坚定的信念才能逐步实现。因为,太多的程序员太依靠开源了,停留在来复制和粘贴阶段了,相反,深入学习,深入源.原创 2022-04-27 13:26:19 · 720 阅读 · 0 评论 -
Android应用被后台杀死后如何重新走闪屏逻辑
APP被后台杀死后,APP端进程被销毁了,也就不存在什么Activity了,也就没有什么Activity堆栈,不过AMS的却是被保留了下来:当用户再次启动APP时候会怎么样呢?这个时候,首先看到其实C,而不是栈底部的A,也就是说往往被杀死后,恢复看到的第一个界面是用户最后见到的那个界面。而用户点击返回,看到的就是上一个界面B,其次是A之所以这样是因为APP端Activity的创建其实都是由AMS管理的,AMS严格维护这APP端Activity对应的ActivityRecord栈,可以看做当前AP原创 2022-04-27 13:22:27 · 428 阅读 · 0 评论 -
Android应用开发--MP3音乐播放器滚动歌词实现
}–LrcProcess.javapackage com.wwj.sb.custom;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList原创 2022-04-27 13:20:39 · 595 阅读 · 0 评论 -
Android实战——简单网络视频播放器
}用getView方法来返回视频对象,主要代码如下@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.item_mainlv,parent,false);holder原创 2022-04-27 13:18:59 · 595 阅读 · 0 评论 -
Android多线程
所以最终,创建Handler的同时则自动在当前线程sThreadLocal中设置Looper对象,并获取该对象,进而获取消息队列。这样一来,Handler自然和消息队列以及线程关联起来了。[](()消息处理Looper通过loop()方法建立消息循环:public static void loop() {//里面调用了sThreadLocal.get()获得刚才创建的Looper对象final Looper me = myLooper();if (me == null) {//如果Looper原创 2022-04-27 13:16:41 · 86 阅读 · 0 评论 -
Android简单笔记本解析
public class NoteSearch extends ListActivity implementsSearchView.OnQueryTextListener {private static final String[] PROJECTION = new String[] {NotePad.Notes._ID, // 0NotePad.Notes.COLUMN_NAME_TITLE, // 1//扩展 显示时间 颜色NotePad.Notes.COLUMN_NAME_MODIFICA原创 2022-04-26 22:58:34 · 127 阅读 · 0 评论 -
Android笔记——ViewPager循环
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);params.gravity = Gravity.BOTTOM ;mLinearLayout.setGravity(Gravity.CENTER);mLinearLayout.setOrientation(LinearLayout.HORIZONTAL);addView(mLi原创 2022-04-26 22:56:48 · 258 阅读 · 0 评论 -
Android用Canvas画一个折线图,并加以简单封装
canvas.drawLine(widthCriterion,hightCriterion,widthCriterion,hightCriterion*9,p);//绘制y角canvas.drawLine(widthCriterion-minCriterion,hightCriterion+minCriterion,widthCriterion+2,hightCriterion,p);canvas.drawLine(widthCriterion,hightCriterion,widthCriterio原创 2022-04-26 22:50:52 · 303 阅读 · 0 评论 -
Android模拟面试,解锁大厂—
private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) {//省略代码…//performLaunchActivityActivity a = performLaunchActivity(r, customIntent);if (a != null) {r.createdConfig = new Configuration(mConfiguration);Bundle oldState = r.原创 2022-04-26 22:49:10 · 94 阅读 · 0 评论 -
Android是怎么学废的,这些话我想送给一事无成的Android开发者们
路其实一直都在那里,只是我们看不到而已!以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上。想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳出编码后,我开始思考和程序及程序员职业生涯相关的问题,最后发现,影响我们走入今天的困局的竟然是一些我们常常挂在嘴边的话。例如:项目太紧整天都在熬项目,加班没时间提升自己。目前工作内容用不到最新的技术,不着急学习新的东西。…[](()今天,就为大家整理一份目前互联网公司最主流的技术学习原创 2022-04-26 22:47:23 · 85 阅读 · 0 评论 -
Android快速入门教程总结帖
授课方式:ppt&源码&讲解课程难度:入门级课程目录:[http://blog.csdn.net/wwj_748/article/details/44892627](()所有课程源码和ppt已公开:[http://pan.baidu.com/s/1bnm7kAz](()小巫从最基本的开发工具介绍开始给大家介绍了关于Android开发中需要用到的一些开发工具,比如IDE、SDK里面的一些工具;接着讲了如何去搭建开发环境,这里涉及到Java环境变量的配置、SDK环境变量的配置,我们要知道原创 2022-04-26 22:45:45 · 92 阅读 · 0 评论 -
Android开发,你所不知道的Android原生开发的现状
此外还有许多针对Android的非关系型的数据库,例如Realm,Parse,Firebase,ObjectBox等(其中有些仍在使用SQLite)。如果我没记错的话,它们中的大多数(甚至全部)都具有自动数据同步功能。 一段时间以来,这些解决方案比较流行,但据我所知,它们已经不复存在了。但是我并不会马上认为非关系型的数据库不再重要了。去年,我编写了一个非常复杂的集成了Parse Server的Android应用。 我使用了Android版本的的Parse SDK,体验都非常好。如果您的公司已经雇用了许多后原创 2022-04-26 22:43:25 · 981 阅读 · 0 评论 -
Android开发人员不得不收集的代码(持续更新中)
getDirLength : 获取目录长度getFileLength : 获取文件长度getFileMD5 : 获取文件的MD5校验码getFileMD5ToString : 获取文件的MD5校验码getDirName : 根据全路径获取最长目录getFileName : 根据全路径获取文件名getFileNameNoExtension :原创 2022-04-26 22:41:29 · 186 阅读 · 0 评论 -
Android开发性能优化案例(2)app卡顿优化
systrace是我们用来抓取一段时间之内的android设备上的数据指标的工具,我理解为: 设备运行日志,只不过这不是文本日志,而是一个html文件,需要使用谷歌浏览器的 [chrome://tracing/](()插件打开。具体步骤如下:1、打开CMD,进入systrace目录:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QWL6bff-1650867514573)(//upload-images.jianshu.io/upload_images/4100513-原创 2022-04-25 14:18:53 · 638 阅读 · 0 评论 -
Android开发如何学习,鸿洋推荐,必属精品
在本篇文章中我们将深入探讨如何成为一个顶尖的学习者。1如何成为一个高段位的学习者?1、建构式的学习模式❝对问题的好奇、对答案的渴望,是驱动我们学习和探索的主要动力。❞「知识不是简单的记忆,而是由我们主动地去建构而来的」。我们必须充分利用现有的知识,在主动性目标或核心问题的引导下去积极地进行探索,只有这样,我们才能够把得到的新知识与旧知识糅合在一起,并在头脑中建构出新的知识体系。「一个好的长时程问题,能让我们成为“构建者”,因为我们不仅在学习知识,还在“建构答案”,在努力回答问题的过程中,原创 2022-04-25 14:17:02 · 303 阅读 · 0 评论 -
Android开发之MVVM模式实践(五)
context: CoroutineContext = EmptyCoroutineContext,start: CoroutineStart = CoroutineStart.DEFAULT,block: suspend CoroutineScope.() -> T): Deferred {val newContext = newCoroutineContext(context)val coroutine = if (start.is 《Android学习笔记总结+最新移动架构视频+大厂安原创 2022-04-25 14:14:58 · 467 阅读 · 0 评论