Android
文章平均质量分 57
Android技术研究
android阿杜
码农
展开
-
Java 和 Kotlin 单例模式写法对比
网上看别人写的,有创意,但是也很奇怪,无法完整反编译。Lazy 内部实现类中包含了双重判断和同步锁代码块。通过静态代码块方式,借助虚拟机在类加载时创建对象。这段代码涉及到高阶函数和属性委托。枚举就不反编译了,没什么区别。原创 2024-06-22 19:44:05 · 657 阅读 · 0 评论 -
面试算法题(7)--写一个java类,实现栈的功能
写一个java类,实现栈的功能之前面试碰到这个题,自己实现栈的功能。首先我们的了解栈的特点,和栈Stack.java各个方法的含义:1、栈是单出入口的数据结构,即出口和入口是共用的。2、栈拥有后进先出的特点。栈Stack.java源码方法分析:/** * @author duke * @dateTime 2018-07-19 22:24 * @description S...原创 2018-07-19 23:14:55 · 17083 阅读 · 0 评论 -
Android 文件选择器 DFileSelector
源码地址:https://github.com/mengzhinan/FileSelector前段时间准备给朋友做一个手机小工具,需要用到选择文件并读取里面的内容。这个读扩展卡选择文件的功能呢,其实也不难,就是个 RecyclerView 和 Adapter 而已。但是感觉自己有点懒,想找找开源的项目用用。网上搜索了下,还真有一个叫 LFilePicker 的项目,地址为https:...原创 2018-11-04 23:19:54 · 24894 阅读 · 10 评论 -
ACache衍生的DSQLiteCache缓存小项目
ASimpleCache是一个优秀的缓存框架。1、可以缓存各类数据,比喻:字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和 byte数据。2、轻,轻到只有一个JAVA文件。3、可配置,可以配置缓存路径,缓存大小,缓存数量等。4、可以设置缓存超时时间,缓存超时自动失效,并被删除。5、支持多进程。等等怎么使用呢?ACache.get(MainA...原创 2018-03-14 16:17:13 · 16881 阅读 · 0 评论 -
SVN服务端、客户端安装配置和填坑
一、svn服务端和客户端安装:1、安装程序:服务端程序:Setup-Subversion-1.8.17.msi客户端程序:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7.msi注意,安装过程中,建议放在盘符根目录,即安装路径中不要有空格和中文。以往做开发的经验得知,空格和中文会导致错误或bug出现。如果环境变量路径是C:\Program File原创 2017-11-14 09:35:01 · 19603 阅读 · 1 评论 -
Android MismatchedInputException,网络请求成功,客户端识别为失败?
记录一个小坑。最近在工作中遇到一个小坑,消耗类我一天的时间最终才把问题解决。事件背景:1、Android 端需要请求网络接口。于是按照惯例我写好调用代码,获取返回状态值。2、运行程序,发现执行结果总是失败。3、抓包查看请求信息,发现请求成功了,服务器返回状态码为200。Response 无返回内容。4、反复检查 Android 端代码,没有发现错误。5、Debug 调式...原创 2019-06-05 09:24:35 · 2921 阅读 · 1 评论 -
IntelliJ Plugin 开发之 plugin.xml 配置文件详解(四)
前面几篇文章,我们一起了解了 Plugin 的项目创建和运行效果。接下来我们开始静下心来深入了解插件的内容了。从 plugin .xml 核心配置文件开始。更消息的内容,请参考官方文档:http://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_configuration_file.html ...原创 2019-01-06 21:22:47 · 26416 阅读 · 1 评论 -
Android dp方式的屏幕适配-原理(后期补充完整讲解)
Android dp方式的屏幕适配-原理传统所说的屏幕适配,其实是针对不同屏幕的UI尺寸适配,即在编写页面时使用了具体的dp、sp值后导致的其他问题。我之前写过一些相关的文章和工具插件,也收到了很多网友的反馈。今天特编写此篇博客,重新整理以前的思路,同时也融入我近期更深刻的理解和总结,完整解答各位网友的疑惑。友情链接,感谢鸿神提供的思路。张鸿洋的《Android 屏幕适配方案》:h...原创 2018-08-25 20:47:57 · 37237 阅读 · 4 评论 -
面试算法题(6)--求素数
求素数这是一道N年前我求职java时的面试题。当年的我是java菜鸟,遇到这道题更是一脸茫然啊。在这趟算法题列车上,还是载上它吧。素数:即是能被1和自己整除的数。1不是素数。比喻:求19是不是素数?那就来个2~18之间的循环,把每个数取出来让19整除,如果余数等于0,那就是素数了,否则不是。明白上面逻辑,就好做了。来个例子,求2~100之间的素数。那么,先得来个2~1...原创 2018-07-19 21:28:05 · 16871 阅读 · 0 评论 -
Android 配置子Module混淆时遇到的错误,和一些零散技术点总结
概要说明:1、子Module不能配置混淆,仅仅只能在主Module中配置混淆。2、主Module配置了混淆,打包成apk后,其他Module的代码也会一起混淆。3、所有Module中的res目录下的资源都会在打包时合并到主Module的res目录下对应文件位置。4、所有被主Module直接或间接引用了的Module,在打包时,其AndroidManifest.xml文件都会合并到主原创 2017-10-28 18:20:09 · 21797 阅读 · 1 评论 -
Android SDK根目录中的SDK Manager.exe双击打不开,为什么?
本文记录一个小问题,就是“双击Android SDK根目录中的SDK Manager.exe文件后没反应,打不开SDK下载管理界面”。这个问题曾经坑绕我很久,总以为是更新SDK时损坏或缺少了什么,而导致我删除整个SDK目录,重新下载。还曾有段时间不敢更新SDK。了解到android 8.0 8.1的sdk都出了,于是还是硬着头皮更新了最新的sdk。果然,再双击SDK Manager.原创 2017-10-28 15:10:40 · 23081 阅读 · 0 评论 -
面试算法题(4)--将一个整数数组中的所有奇数放到偶数前面
将一个整数数组中的所有奇数放到偶数前面如:原始数组:{5,8,3,4,1,7,9,2,6,120}最终结果:{5,3,1,7,9,2,4,6,120,8}面试时面试官说出题目后,加了一句,需要最优时间复杂度。我当时就有点懵,对时间复杂度不了解,于是第一想法就排除了双重循环,然后就想不出更好的解决办法了。仔细分析这个题目:寻找数组前面所有的偶数(能被2整除的数),放到数组后面;寻找数组后面所有的奇数...原创 2018-07-15 17:09:43 · 19836 阅读 · 0 评论 -
面试算法题(3)--编写算法:字符串类型的小数转换成double类型的小数值
自己编写算法,将一个字符串类型的小数,转换成double类型的小数。比喻:"15.246"转换成15.246,不能使用系统提供的Integer.parseInt和Double.parseDouble等方法。初步一想,感觉是没办法啊。其实不难,我之前讲过一个类似的例子,两个大数相加:https://blog.csdn.net/fesdgasdgasdg/article/details/8095382...原创 2018-07-10 22:28:31 · 18514 阅读 · 1 评论 -
Android 自己开发的消息事件小项目DBus
CSDN地址:http://blog.csdn.net/fesdgasdgasdg/article/details/79121783GitHub地址:https://github.com/mengzhinan/DBusDBus一个简易、高效的消息框架。没看过EventBus的源码,但是个人感觉此项目够简洁高效、易懂易用!DBus项目突出的特点:1、注册消息事件的类可以是原创 2018-01-21 18:24:05 · 18028 阅读 · 2 评论 -
IntelliJ Plugin 开发之 Hello World(二)
学会了 IntelliJ Plugin 开发环境配置,接下来按照世界惯例,来一个 Hello World 熟悉下环境。1、创建一个插件项目打开 IDEA,在启动界面选择 Create New Project。在弹出的窗口中选择 IntelliJ Platform Plugin,下一步。设置 Project 名称,保存目录位置。继续 Finish 完成创建。项目创建完成后,默...原创 2019-01-06 17:44:56 · 17755 阅读 · 2 评论 -
Android 颜色透明度百分比与十六进制对照表
100% — FF99% — FC98% — FA97% — F796% — F595% — F294% — F093% — ED92% — EB91% — E890% — E689% — E388% — E087% — DE86% — DB85% — D984% — D683% — D482% — D181% — CF...原创 2019-02-11 21:54:32 · 13595 阅读 · 0 评论 -
面试算法题(2)--两个大数相加
两大大数相加听说这是个频繁出现的算法题,在某某网站是的排行很靠前。在找工作之前,同事提过一次,我没当回事,恰恰在我第一家面试时就碰到了。两个大数相加。1、是整数;2、两个数无限大,long都装不下;3、不能用BigInteger;4、不能用任何包装类提供的运算方法;5、两个数都是以字符串的方式提供。两个字符串的数字,怎么相加?其实也简单,核心点考的是ASCII码和相加进位的问题。比喻字符类型的'9...原创 2018-07-07 18:57:23 · 45659 阅读 · 10 评论 -
面试算法题(1)--链表反转
分享一道面试碰到的算法题。链表反转,不借助任何掐数据结构或容器。意思就是把链表尾当成链表头,并且每个节点的指针反向。先看下图:黑色部分是原来链表;红色部分是翻转后的链表。思路分析:1、拿到head链表头,然后递归处理。2、当处理到head节点是,需要把head的next指针置空。3、如果是最后一个节点,需要把节点引用赋给head。4、如果是中间的某节点,需要把其引用赋给他下一个节点的next指针。...原创 2018-07-07 17:10:22 · 17216 阅读 · 0 评论 -
IntelliJ Plugin 开发之 AnAction 运行原理(五)
在前面编写 Demo 项目时,我们邀请了 Action 大神出场,但貌似对他很陌生。本讲的主角就是他。Action 有多神秘?官网文档地址:http://www.jetbrains.org/intellij/sdk/docs/basics/action_system.html本文中,我会忽略一些技术不讲,比喻注册 Action Group、Action 代码方式注册等,几乎用不到。Ac...原创 2019-01-06 22:20:35 · 19655 阅读 · 0 评论 -
IntelliJ Plugin 开发之环境配置(一)
此系列文章来给大家分享一下我对 IntelliJ Plugin 开发的经验积累。IntelliJ Plugin 开发指的是什么呢?就是 IntelliJ 平台的插件,比喻 Android Studio 上的 GsonFormat、Wifi ADB 等插件工具。一、开发工具下载地址:官网地址:https://www.jetbrains.com看到这个地址是不是很熟悉?不废话了,就是我...原创 2019-01-06 17:21:05 · 22606 阅读 · 6 评论 -
Android 在Activity中调用finish()方法,会走哪些生命周期方法?
看标题问题,你可能会想:这还不简单,在程序中调用finish(),Activity会继续调用onPause()、onStop()、onDestroy()方法。其实错了,有坑。1、在Activity的onCreate()中调用finish()方法,则执行的生命周期方法顺序为:onCreate() -> onDestroy()2、在Activity的onStar原创 2018-01-23 12:43:58 · 26125 阅读 · 0 评论 -
IntelliJ Plugin 开发之调试运行、部署、本地安装和发布项目到仓库(三)
有了前面创建 Hello World 项目的经验,接下来试试如何调试运行、部署、本地安装和发布项目到仓库。一、调试运行:写好了 Demo 项目,该怎么运行呢?和我们平时写 Java、Android 项目一样,直接点击 IDEA 菜单栏的 Run 或 Run Debug 即可。But 要注意的是,我们现在编写的是 Plugin 程序,是依附在 IDEA 上生存的。故此时直接点击 Run ...原创 2019-01-06 18:29:08 · 20564 阅读 · 4 评论 -
面试算法题(5)--交换两个整型变量(不借助临时变量)
交换两个整型变量(不借助临时变量)这是多年前我做Java时面试碰到的题目,其实不难。特意写下这篇博客,是因为我发现有不止一种方法可以实现,原谅我无聊的双手。图1先简单说说普通的方法吧,如上图:int i = 5;int p = 3;int temp;先进行第一步,把p的值保存到临时变量tmep中,即temp = p;此时p的空间腾出来了(可以擦除内容了),第二步,把i的值赋给p,即p = i;此时...原创 2018-07-15 18:28:21 · 16480 阅读 · 1 评论 -
Android View类的四个构造函数-面试时总被问到
/** * 从代码创建视图时使用的简单构造函数.即在代码中new View(context); * * @param context 上下文参数 */public View(Context context) {mContext = context;mResources = context != null ? context.getResources() : null;原创 2017-11-28 20:20:29 · 17327 阅读 · 0 评论 -
Android Jetpack Components of Lifecycle 学习笔记
Android Jetpack Components of Lifecycle 学习笔记Android Jetpack Components of LiveData 学习笔记Android Jetpack Components of ViewModel 学习笔记都说天下文章一大抄。不过我不担心,我从来不抄袭别人的见解。也有人说博客、GibHub 上 90% 的内容都是重复的。...原创 2019-08-11 23:47:02 · 378 阅读 · 0 评论 -
IntelliJ Plugin 开发之添加第三方 jar (六)
本小节内容不多,但是个人感觉比较独立,还是拿出来单讲吧。在开发 IntelliJ Plugin 时,如果需要用到 Gson、OKHttp 等第三方库时,该怎么办呢?回答这个问题前,我先补充前面没有讲到的内容。插件开发其实可以使用两种方式,官方文档:http://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system.html...原创 2019-01-07 22:18:26 · 20195 阅读 · 3 评论 -
Kotlin for 循环写法整理
object Foreach { private val list = listOf("apple", "banana", "kiwifruit") private val array = arrayOf("java", "c plus plus", "kotlin", "python") // list for fun forList1() { for (item in list) { println(item) .原创 2021-06-17 17:24:48 · 1218 阅读 · 1 评论 -
Android Studio 不提示错误代码,不提示类导包
(记录一个小短文)最近换了新电脑,然后安装了最新的 Android Studio。在接下来的工作中,发现 Android Studio 代码编辑界面不提示类导包弹框提示了,编写错误的代码也不变红提示。等到运行时,才提示各种未导包、代码错误。难道这是 Android Studio 4.1.3 版本的新功能?网上查了很多资料,都说要关掉省电模式就行了(Android Studio -> File -> Power Save Mode 前的✅去掉)。实测不行。网上又说是 .. 插件原创 2021-03-24 15:12:45 · 2813 阅读 · 5 评论 -
Android 中使用 ServiceLoader、AutoService 摔坑记录
ServiceLoader Demo:https://github.com/mengzhinan/ServiceLoader_testAutoService Demo:https://github.com/mengzhinan/AutoService_test对 ServiceLoader 和 AutoService 早有耳闻,因各种原因而未对相关技术深入了解。这两天在整理二者时踩到了无数硬坑,浏览器搜索发现全世界都是某一篇文章的集聚性传播,无法解决我的问题。耗时 2 天死磕终于...原创 2020-06-21 18:25:34 · 4124 阅读 · 5 评论 -
Android Wifi P2P 入门
Demo 下载地址:https://github.com/mengzhinan/WiFi_P2P_testPart 1 前序:以前和朋友一起研究过 Wifi P2P ,后来时间拉长就忘记了。近期迫于寻找一个独特的技术点分享,不得又重新回顾 P2P 了。上面有我学习的 Demo 连接,大佬可以下载参考,或 GoogleAndroid Doc:https://developer.android.google.cn/guide/topics/connectivity/wifip2pPar.原创 2020-06-05 00:30:52 · 8863 阅读 · 2 评论 -
Android 手机设置 Charles 代理,pem 证书安装不上?
最近在家办公,需要远程链接内网调试,but 公司的 vpn 账号只能单设备登录,只好使用手机代理了。本文使用的代理是 Charles,具体 Charles 的使用教程网上一堆我不说了,我重点说说华为手机安装不了证书问题。我按照电脑端 Charles 的提示,手机设置了代理 ip 和端口,然后手机浏览器搜索 chls.pro/ssl ,然后下载好了charles-proxy-ssl-p...原创 2020-03-02 10:27:33 · 22128 阅读 · 1 评论 -
Android Studio开发NDK流程--经验
最近特意研究了下ndk开发,发现其实android端很简单,难点在于c/c++端的开发。如果真想把ndk开发研究的特别牛,那就得往c/c++方向转了。但是个人感觉没必要,知道native代码如何编译成h文件,如何实现简单的c文件实现,如何打包so文件,以及如何在android中使用即可。查阅了众多资料,实践研究了n牛,总结的经验,也存在一些问题,与大家分享。一、编写native方法在and原创 2016-06-22 09:07:00 · 17421 阅读 · 1 评论 -
Android蓝牙开发---站在前辈的肩膀上唠嗑
描述一段背景:前年我找工作时,总碰到一个问题。面试官问:“你会蓝牙开发吗?”。我说:“不会”。面试官答:“那,很抱歉。我们商量了一下,觉得你不适合这个岗位。”于是我就走了,心里想:“就应为一个蓝牙通讯技术不会,就把我给cut了,这面试官好有想象力。”我一个同学,都没做过编程,我半年时间都带到android开发道上了。我仅仅蓝牙没做过,研究蓝牙无非就是三两天的时间,难吗?于是原创 2016-06-22 09:38:27 · 22400 阅读 · 9 评论 -
android-scrollToTop回到顶部-兼容PullTorefreshScrollview
前两天闲,应项目组需求,特研究了一下“回到顶部”效果,即:页面里有scrollview,内容很多,当滑动到页面下面或者更深时,需要回到顶部,即可点击出现的按钮,省得回滑N久。我没有搜,或许网上有很多这样的例子,此文写的不好的地方,望指点。图:初一看是不是觉得很简答?没错,当时我也是这样想的页面内容很长,就弄个scrollview,回到顶部按钮需要固定在右下角,故大概的布局代码:原创 2016-07-02 08:49:32 · 19559 阅读 · 4 评论 -
Java内存堆栈分析
java中有如下地方可以存储数据:1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制。2.栈(堆栈,stack):存放基本类型的变量数据和对象的引用(包括字符串对象的引用,因为String是类),但对象本身不存放在栈中,而是存放在堆(new 出来的对象,除String对象)或者常量池中(String常量对象存放在常量池中)。3. 堆(heap):存放所有new出原创 2016-07-03 21:15:35 · 16971 阅读 · 2 评论 -
Android中使用Handler造成内存泄露的分析和解决
Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。原创 2016-07-04 10:05:12 · 17026 阅读 · 1 评论 -
Android Studio配置Android Annotations框架详解--说说那些坑
我们开发过程中都需要写些findViewByid、serOnclickListener等类似的代码,虽然不费事,但是一个项目下来,工作量还是很大的。为了节省工作量,运生了很多对应的注解框架。网上的博客、身边的同事大多使用的是 xUtils、ButterKnife实现注解,我初次使用的也是ButterKnife。然而,今天小试了下Android Annotations注解框架,用起来确实比Butte原创 2016-07-05 23:23:27 · 22529 阅读 · 1 评论 -
Android Studio配置greenDao框架详解--说说那些坑
“我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。而今天的主角便是 greenDAO,下面,我将详解地介绍如原创 2016-07-06 00:28:35 · 20276 阅读 · 2 评论 -
MVP+Retrofit2+RxJava使用方法demo
序前段时间了解到MVP+Retrofit2+RxJava非常火,也确实好用。正好前几天咬牙研究了一番,故写一篇博客,和大家分享。此类资料很多,写的不好,高手勿喷。正题MVP相信大家已经很熟,使用的很广泛。相比MVC而言,整个项目结构确实很清晰有条理。Model: IModel,ModelImpl数据模型:访问数据和业务逻辑。面向接口编程Vie原创 2016-07-10 21:49:16 · 21125 阅读 · 3 评论 -
Android Realm数据库完美解析
当我们的app有数据需要保存到本地缓存时,可以使用file,sharedpreferences,还有sqlite。sharedpreferences其实使用xml的方式,以键值对形式存储基本数据类型的数据。对于有复杂筛选查询的操作,file和sharedpreferences都不能满足了。sqlite可以满足有大量复杂查询要求的缓存数据操作。但是sqlite的使用略复杂,代码量很大,还好网原创 2016-07-13 13:29:12 · 32694 阅读 · 6 评论