程序员
文章平均质量分 88
m0_65511992
这个作者很懒,什么都没留下…
展开
-
Android企业级实战-界面篇-1,一个回答引发热烈讨论
前言(大佬请直接跳转至第三步)==============================================================================计蒙从上班再次回到学校生活后,认识的很多学校软件系朋友通过校招拿到了大厂Android开发岗位的offer,计蒙因为学习是专科起点,到本科后算法部分缺陷极大,仅拿到一家大厂offer,由于个人好不容易回到校园生活,不想太早再次回到上班的日子,于是继续准备升学,为了不将Android遗忘,还是偶尔写写代码,也就有了此文章。原创 2022-01-03 12:08:18 · 166 阅读 · 0 评论 -
Android中的动画效果,搞懂开源框架设计思想真的这么重要吗
长整型值:duration 属性为动画持续时间说明: 时间以毫秒为单位布尔型值:fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用–>3.translate<?xml version="1.0" encoding="utf-8"?> <translateandroid:fromXDelta=“30”android:toXDelta="-80..原创 2022-01-03 12:02:38 · 137 阅读 · 0 评论 -
Android开发之FastJson概述与简单使用,Android岗面试
public static final T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBeanpublic static final JSONArray parseArray(String text); //把JSON文本parse成JSONArraypublic static final List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合原创 2021-12-31 12:54:32 · 946 阅读 · 0 评论 -
Android开发中混淆后Gson序列化、反序列化的那些坑,移动端跨平台框架
minifyEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’signingConfig signingConfigs.config}}}因为开启混淆会使编译时间变长,所以 debug 模式下不开启。我们需要做的是:将release下minifyEnabled的值改为true,打开混淆;加上shrinkRe原创 2021-12-31 12:53:34 · 1974 阅读 · 0 评论 -
Android开发5年,技术增长乏力,成为优秀开发者你还差点什么
其他技术自然不必多说了,你看源码是不是想能够单步调试最好了,为什么?因为你看不懂它的代码调度处理流程。这些代码都是基于java 的面向对象思想建立的,对Java语言的掌握就自然而然成为了你深入Android开发的绊脚石。Android应用程序开发是以Java语言为基础的(kotlin也是对java的封装),你做Android开发的时候经常遇到的各种问题,其实都是因为java基础没打好,很多人android做着做着又滚回去恶补java了。这也是为什么很多大牛都建议Android开发者一定要学好java,熟悉原创 2021-12-31 12:52:26 · 226 阅读 · 0 评论 -
Android应用程序签名 debug签名,Android开发核心知识笔记共2100页
1)keytool:该工具位于jdk安装路径的bin目录下;2)jarsigner:该工具位于jdk安装路径的bin目录下;3)zipalign:该工具位于Android-sdk-windows/tools/目录下2.生成未经签名的apk文件打开Eclipse,在Android工程名称上点击右键,依次选择“Android Tools” - “Export Unsigned Application Package …”,然后选择一个存储位置保存即可。这样就得到了一个未经签名的apk文件。《Andr原创 2021-12-31 12:51:23 · 136 阅读 · 0 评论 -
Android应用开发之自定义View触摸相关工具类全解,面试必问
public final class VelocityTracker {//获取VelocityTracker实例static public VelocityTracker obtain() {}public static VelocityTracker obtain(String strategy) {}//回收后代表你不需要使用了,系统将此对象在此分配到其他请求者public void recycle() {}//清空回到初始状态,computeCurrentVelocity都被reset了原创 2021-12-31 12:50:25 · 146 阅读 · 0 评论 -
Android应用开发--MP3音乐播放器界面设计(1),android应用案例开发大全第四版
android:layout_width=“wrap_content”android:layout_height=“wrap_content”android:layout_toRightOf="@id/previous_music"android:background="@drawable/repeat_none_selector" /><Buttonandroid:id="@+id/play_music"android:layout_width=“wrap_content”and原创 2021-12-31 12:48:14 · 211 阅读 · 0 评论 -
Android工作经验6年,多亏这份《秋招,handler机制的原理面试
而面试官也一样,他也可能只掌握了20%的知识,而且一个面试也不会有足够多的时间给你展示你全部的知识,而往往只会注意开发中最常遇到的20%。这时候,你对这些问题理解的深度就显得尤为重要。回答了10个问题,而每个问题都只是浅显分析,还没有你将一个问题讲得透彻、全面更能让面试官加分。当然这并不意味着当你要准备跳槽,要做面试准备的时候,你就只盯着几个自己感兴趣的课题,使劲背,使劲学,而其他的知识点就完全不学了。想要面试的时候吊打面试官,最简便的,最稳妥的办法就是将一套完整系统的面试题全部刷完,然后再进行自我总结原创 2021-12-31 12:45:59 · 71 阅读 · 0 评论 -
Flutter:基于video_player实现视频相关手势控制、全屏播放
Key key,@required File file, // 当前需要播放的地址this.width: double.infinity, // 播放器尺寸(大于等于视频播放区域)this.height: double.infinity,this.title = ‘’, // 视频需要显示的标题}) : type = VideoPlayerType.file,url = file,super(key: key);final url;final VideoPlayerType type;原创 2021-12-30 14:10:32 · 4181 阅读 · 0 评论 -
Flutter:基于video_player实现视频相关手势控制、全屏播放(1)
4.2. 初始化视频4.2.1. 初始化首先我们需要在initState生命周期中对视频进行初始化,对视频是否加载成功显示不同的UI界面:加载中、加载成功、加载失败。void _urlChange() async {if (widget.url == null || widget.url == ‘’) return;if (_controller != null) {/// 如果控制器存在,清理掉重新创建_controller.removeListener(_videoListener);_原创 2021-12-30 14:09:37 · 1748 阅读 · 0 评论 -
Flutter日记--修改App图标,名称,启动页,帮你快速拿Offer
添加对应的图标选择生成的一些基本参数,这里感觉默认就够用了:随后选择初始化开始生成:随后查看效果,生成速度很快〜接下来用Xcode:对应的ios模块,替换对应资源:下载已生成的图标,选择iOS图标资源复制到以下地址中:ios ===> Runner ===> Assets.xcassets ===> AppIcon.appiconset随后替换Contents.json文件即可。运行查看效果:俩者一对比,还是Android好,哈哈哈〜二,移动端启动页处理1原创 2021-12-30 14:06:51 · 1048 阅读 · 0 评论 -
Flutter数据库的使用,android移动开发基础案例教程答案
为了使用 SQLite 数据库,首先需要导入 sqflite 和 path 这两个 packagesqflite 提供了丰富的类和方法,以便你能便捷实用 SQLite 数据库。path 提供了大量方法,以便你能正确的定义数据库在磁盘上的存储位置。dependencies:sqflite: ^1.3.0path:版本号复制代码使用导入 sqflite.dartimport ‘dart:async’;import ‘package:path/path.dart’;import原创 2021-12-30 14:05:56 · 185 阅读 · 0 评论 -
Flutter开发之——表单组件,flutterprovider局部刷新
表单组件时Flutter中用来进行用户输入,提交用户输入信息的组件。在使用表单组件时,需要将其放入表单容器中,使用时类似于H5中的form。常用表单组件有:FormFormFieldTextFormField二 表单组件介绍2.1 FormForm类似于H5中的form,是表单控件的容器Form的child通常为多组件容器,比如Column,Row2.2 FormFieldFormField是一个表单控件,此控件包含表单的状态,方便更新UI通常情况下原创 2021-12-30 14:05:01 · 236 阅读 · 0 评论 -
Flutter开发之——表单组件(1),三年经验Android开发面经总结
三 表单组件基本用法3.1 基本用法代码Form(child: Column(children: [Text(“用户名:”),TextFormField(),Text(“密码:”),TextFormField(),RaisedButton(onPressed: (){},child: Text(“登录”),)],),)3.2 效果图四 表单属性用法4.1 表单属性代码//变量定义var userNameController = new TextEditingControl原创 2021-12-30 14:04:06 · 960 阅读 · 0 评论 -
Flutter开发之——json序列化,android开发平台的框架原理
String chapterName;bool collect;int courseId;String desc;String descMd;String envelopePic;bool fresh;String host;int id;String link;String niceDate;String niceShareDate;String origin;String prefix;String projectLink;int publishTime;int real原创 2021-12-30 14:03:11 · 116 阅读 · 0 评论 -
Android高级进阶之12条代码优化以及性能优化方案,成功入职阿里
<?xml version="1.0" encoding="utf-8"?>把没有任何条件选择的item放到最后,当前面的item都不匹配时就会选择最后的item。4、context引起的内存泄漏public static WifiManager getWIFIManager(Context ctx) {WifiManager wm = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);}上面的代码直接使用con原创 2021-12-29 15:40:36 · 87 阅读 · 0 评论 -
Android面试题汇总,android插件化开发指南
如何计算bitmap大小,如何检测bitmap是否超过了1M,并打印如何给在ImageView里面展示一个带边框的bitmapHandler机制ANR有哪些,怎么监控LRUCache原理什么情况下会出现ConcurrentModifyException,为什么会出现,怎么解决线程池使用过没,有哪些参数,什么作用HashMap原理SparseArray的原理SparseArray和HashMap的查找和插入时间复杂度是多少Android打包流程,..原创 2021-12-29 15:38:23 · 125 阅读 · 0 评论 -
Android面试必备知识点:Android中Handler八大问题汇总
要理解handler的实现原理,其实最重要的是理解Looper的实现原理,Looper才是实现handler机制的核心。任何一个handler在使用sendMessage或者post时候,都是先构造一个Message,并把自己放到message中,然后把Message放到对应的Looper的MessageQueue,Looper通过控制MessageQueue来获取message执行其中的handler或者runnable。 要在当前线程中执行handler指定操作,必须要先看当前线程中有没有looper,原创 2021-12-29 15:37:15 · 384 阅读 · 0 评论 -
Android面试官:这几个问题都回答不出来你真的懂Activity的启动模式吗
当然可以!例:平时我们使用手机经常会在刷微博和聊微信来回切换,每次切换系统都会为我们保存上一次离开的状态。任务里Activity必须是来自同一个应用吗当然不是!例:当我们在社交软件设置用户头像时一般会有拍照和相册两个选项,选择拍照会跳转到摄像机软件,选择相册会跳到系统相册软件。通过这几个软件之间的共同合作完成了一次任务。任务中的根Activity通常情况下,我们都是通过设备主屏幕点击应用图标启动应用的,同理设备主屏幕也是大多数任务的起点,而应用中的入口Activity就是这个任务的根Ac原创 2021-12-29 15:36:12 · 77 阅读 · 0 评论 -
Android进阶:十三,太牛了
byte[] b = new byte[1024];int ch = 0;while ((ch = fis.read(b)) != -1) {// 变换bb=crypt(b, “encrypt”);fos.write(b, 0, ch);}}这时候,调用readClass方法和encrypt方法,就能在原本XX.class文件的目录下生成XX附件.class。这时候,我们就使用这个副本的字节码文件,删除原来的,下次运行的时候再解密,这样就行了。对类加密之后,需要用自己的方式把类再加载出来原创 2021-12-29 15:34:05 · 57 阅读 · 0 评论 -
Android进阶:Bitmap的高效加载和Cache,kotlinui组件
Bitmap bitmap = mBitmapLruCache.get(“1”);ivBitamp.setImageBitmap(bitmap);//删除缓存,一般不会用,因为快满时会自动删近期最少使用的缓存,就是它的核心功能mBitmapLruCache.remove(“1”);}可见使用很简单,那么LruCache是怎么完成 删除“近期最少使用” 的呢?看下LruCache的代码:public class LruCache<K, V> {//此map以强引用的方式存储缓存对象原创 2021-12-29 15:33:02 · 181 阅读 · 0 评论 -
android:线程池和AsyncTask使用小结,android插件化和热修复区别
在调用publishProgress(Progress… values)时,此方法被执行,直接将进度信息更新到UI组件上。(主线程中执行,当后台任务的执行进度发送改变时此方法会被调用).onPostExecute()方法当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中, 直接将结果显示到UI组件上。(异步执行后这个方法被调用)代码示例(有详细的注释):package tsou.cn.threadtest;import android.app.ProgressDialog;原创 2021-12-28 14:13:11 · 108 阅读 · 0 评论 -
Android高级面试题大全(持续更新中),android驱动开发权威指南pdf
双重检测锁模式(由于JVM底层模型原因,偶尔会出问题,不建议使用)静态内部类式(线程安全,调用效率高,可以延时加载)枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)10. 通过静态内部类实现单例模式有哪些优点线程安全,调用效率高,可以延时加载11. synchronized volatile关键字有什么区别?以及还有哪些同样功能的关键字(1) volatile是变量修饰符,而synchronized则作用于一段代码或者方法。(2) volatile只是在线程内存和原创 2021-12-28 14:12:03 · 243 阅读 · 0 评论 -
Android高工面试:如果需要实现一个-路由(Router,万字解析
这样就可以支持多模块使用了。自定义注入 routerRouter.getInstance().add(“activity/three”, ThreeActivity.class);跳转的时候调用Router.getInstance().build(“activity/three”).navigation(this);结果回调路由跳转结果回调。Router.getInstance().build(“my/activity/main”, new RouterCallback() {@Overri原创 2021-12-28 14:10:01 · 294 阅读 · 0 评论 -
Android音视频开发入门(2)MediaPlayer 生命周期及create()分析
private static void postEventFromNative(Object mediaplayer_ref,int what, int arg1, int arg2, Object obj){//得到弱引用的MediaPlayerfinal MediaPlayer mp = (MediaPlayer)((WeakReference)mediaplayer_ref).get();if (mp == null) {return;}…//如果handler不为空,则发送一条me原创 2021-12-28 14:08:53 · 598 阅读 · 0 评论 -
Android面试心得必备技能储备详解,已拿到offer,android系统开发入门
五、HandlerThread、IntentService理解六、弱引用、软引用区别七、int、Integer有什么区别主要考值传递和引用传递问题八、手写生产者/消费者 模式(二)Android一、android启动模式需要了解下Activity栈和taskAffinity1.Standard:系统默认,启动一个就多一个Activity实例2.SingleTop:栈顶复用,如果处于栈顶,则生命周期不走onCreate()和onStart(),会调用onNewIntent(),适合推送消息详原创 2021-12-28 14:06:53 · 139 阅读 · 0 评论 -
Cocos2d-x 3,GitHub标星50k的Android全栈技术知识
本篇博客介绍Cocos2d-x 3.2中Lua测试项目中的FontTest例子,主要使用了字体文件来创建我们想要的字体样式:第一个参数为文本,第二参数为ttf字体文件,第三个参数为字体大小,第四个参数为块大小,第五个参数为文本横向对齐方式,第六个惨为文本纵向对齐方式。例子效果图:示例代码:(注:单独文件不可运行,具体可参考lua-tests)–4个标签的Taglocal kTagLabel1 = 0local kTagLabel2 = 1local kTagLabel3 =原创 2021-12-27 13:54:54 · 64 阅读 · 0 评论 -
Cocos2d-x 2,flutter二维码扫描第三方
如何创建Cocos2d-x 2.3.3 项目初始化Box2d物理世界,并模拟物理世界如何添加小鸟到物理世界如何添加地板添加水管碰撞检测本文总结效果图:1. 如何创建Cocos2d-x 2.3.3本篇博客是基于Cocos2d-x 2.3.3,初学者可以选择这个版本学习,也可以从3.x版本学习,但版本差异较大。用命令行进入目录D:\cocos2d-x-2.2.3\tools\project-creator,敲入以下命令创建项目:python create..原创 2021-12-27 13:53:40 · 345 阅读 · 0 评论 -
Choreographer机制和卡顿优化,2021Android大厂面试题来袭
"this case yet. Choreographer needs a way to explicitly request ""vsync for a specific display to ensure it doesn’t lose track "“of its scheduled vsync.”);scheduleVsync();return;}// Post the vsync event to the Handler.// The idea is to prev..原创 2021-12-27 13:52:41 · 683 阅读 · 0 评论 -
Choreographer全解析,最新出炉
mLastFrameTimeNanos = Long.MIN_VALUE;//一帧间隔时间mFrameIntervalNanos = (long)(1000000000 / getRefreshRate());mCallbackQueues = new CallbackQueue[CALLBACK_LAST + 1];for (int i = 0; i <= CALLBACK_LAST; i++) {mCallbackQueues[i] = new CallbackQueue();}}原创 2021-12-27 13:51:33 · 320 阅读 · 0 评论 -
BAT等大厂Android岗面经分享,降妖除魔金刚经,源码解析
1.1.6 HashMap(1).HashMap的底层原理是什么?线程安全么? (百度 美团)(2).HashMap中put是如何实现的? (滴滴)(3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?(4).什么是哈希碰撞?怎么解决? (滴滴 美团)(5).HashMap和HashTable的区别 (小米)(6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? (滴滴)(7).hashmap concurrenthashmap原理原创 2021-12-27 13:48:24 · 148 阅读 · 0 评论 -
ASP标准MD5加密签名函数代码,android开发入门到精通
md5_F = (x And y) Or ((Not x) And z)End FunctionPrivate Function md5_G(x, y, z)md5_G = (x And z) Or (y And (Not z))End FunctionPrivate Function md5_H(x, y, z)md5_H = (x Xor y Xor z)End FunctionPrivate Function md5_I(x, y, z)md5_I = (y Xor (x Or (N原创 2021-12-27 13:45:06 · 139 阅读 · 0 评论 -
Fragment执行流程分析,Android经典入门教程
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 把第一个Fragment HomeFragment加载进来mHomeFragment = new HomeFragment();// 第一个参数是Fragment的容器id,需要添加的FragmentfragmentTransaction.replace(R.id.main_tab_fl, mHomeFragment);// 一定要comm原创 2021-12-26 15:45:25 · 245 阅读 · 0 评论 -
FlyTour 新闻客户端是 Android MVP+Dagger2+Retrofit,android开发环境的搭建步骤
BaseMvpFragmentBaseRefreshFragmentBaseAdapter功能特色:public boolean enableToolbar() {return true;}public int onBindToolbarLayout() {return R.layout.common_toolbar;}支持 loading 加载数据public void showInitLoadView() {showInitLoadView(true);}..原创 2021-12-26 15:44:00 · 100 阅读 · 0 评论 -
Flutter版 WanAndroid App,714页PDF的鸿蒙学习笔记
if (baseResp.code != Constant.STATUS_SUCCESS) {return new Future.error(baseResp.msg);}if (baseResp.data != null) {bannerList = baseResp.data.map((value) {return BannerModel.fromJson(value);}).toList();}return bannerList;}}资源文件 resources|–res原创 2021-12-26 15:42:35 · 132 阅读 · 0 评论 -
Flutter开发之——Linux上搭建Flutter开发环境,android插件化
使之生效source /etc/profile四 运行flutter doctor4.1 请先检查是否已安装gitgit --version如果未安装,请先执行如下指令sudo apt-get install git4.2 运行 flutter doctor4.2.1 执行flutter doctor前,会下载dart,请确认已安装curlsudo apt-get install curl4.2.2 执行flutter doctor4.3 解决错误问题4.3.1 Androi.原创 2021-12-26 15:39:45 · 1575 阅读 · 0 评论 -
Flutter开发之——json序列化,android开发入门书籍推荐
dependencies:json_annotation: ^4.0.1 #json_annotation版本dev_dependencies:build_runner: ^2.0.3 #build_runner版本json_serializable: ^4.1.2 #json_serializable版本三 根据json创建序列化类3.1 接口文件API:https://www.wanandroid.com/article/list/0/json3.2 序列化类(Art原创 2021-12-26 15:38:20 · 618 阅读 · 0 评论 -
Flutter实战(三)检验Flutter的跨平台能力,手持4个大厂offer的我
if (debugDefaultTargetPlatformOverride != null)result = debugDefaultTargetPlatformOverride;//如果到这一步,还没有取到 TargetPlatform 的值,就会抛异常if (result == null) {throw FlutterError(‘Unknown platform.\n’'${Platform.operatingSystem} was not recognized as a target原创 2021-12-26 15:36:55 · 134 阅读 · 0 评论 -
Flutter如何实现下拉刷新和上拉加载更多,阿里巴巴android开发手册
return null;}异步加载数据,注意:在Flutter中刷新数据使用的是setState,不然无效,数据不会刷新;数据的获取需要使用[]取值,不能使用对象“ . ”的取值方法!//加载列表数据loadMoreData() async {this.currentPage++;var start = (currentPage - 1) * pageSize;var url =“https://api.douban.com/v2/movie/movieType?start=movieTyp原创 2021-12-26 15:32:40 · 194 阅读 · 0 评论