
Android
文章平均质量分 64
moon-sky
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MVI是噱头还是真有用?
MVI?是噱头还是真有用?今天逛技术论坛的时候偶然发现了这个词,眼前一亮,因为之前活跃在大众面前的架构模式是MVC、MVP、MVVM,至于MVI真的是第一次看到,心里一慌,自己这么out了吗?赶紧Google一下。不看不知道,关于MVI的文章还是不少的,甚至github上有开源的帮助开发者用MVI模式构建项目的代码。并且MVI的概念在2015年的时候就被提出来,但是一些文章也是最近两年才开始写的,由此可见一项新技术或者概念从提出到走到大众面前确实需要很长的路要走。我会在文件末尾放上一些我觉得写的还不错原创 2021-11-09 21:20:56 · 2853 阅读 · 1 评论 -
优雅的获取Application Context
优雅的获取Application Context前言在android开发中,很多场景我们都会用到Context,比如注册BroadcastReceiver,获取系统service,获取资源等。但是由于Context一般与生命周期关联,错误使用容易造成内存泄漏,所以我们一般会选择使用生命周期最长的Application Context,在其他类中获取application context的方式有两种第一种方式:在application添加一个context类型的成员变量,通过Application.g原创 2021-07-22 20:44:13 · 991 阅读 · 0 评论 -
【源码学习】关于Activity的启动模式
【源码学习】关于Activity的启动模式我们都知道Activity的启动模式作为android的基础问题经常在面试中反复被提及。那么究竟这个启动模式到底是什么?什么时候会用到?怎么用?启动模式是什么?我们知道activity作为android应用的四大组件之一,也是作为用户交互界面的承载者,从一个Activity A跳转到另外一个Activity B的时候,以及从Activity B点击返回键的时候,在底层上到底发生了吗?这里我们先来了解一下几个概念:ActivityRecord TaskRecor原创 2021-04-02 11:08:02 · 169 阅读 · 0 评论 -
【性能优化】android应用内存优化那些事
【性能优化】android应用内存优化那些事android GC机制内存被管理的环境(例如ART或Dalvik虚拟机)会跟踪每个内存分配。一旦确定程序不再使用内存,便将其释放回堆,而无需程序员干预。在托管内存环境中回收未使用的内存的机制称为垃圾回收。垃圾回收有两个目标:在程序中查找将来无法访问的数据对象;(可达性分析算法)回收那些对象使用的资源。(垃圾回收算法)回收哪些内存?引用的分类强引用:代码中普遍存在的,只要强引用还存在,垃圾收集器就不会回收 掉被引用的对象。软引用:SoftRe原创 2021-03-30 22:15:04 · 176 阅读 · 0 评论 -
【性能优化】启动优化那点事
【性能优化】启动优化那点事冷启动、热启动和温启动冷启动(cold start)冷启动是指应用程序从头开始:系统进程还没有创建应用进程的前提下,开始创建应用程序的进程。自启动设备启动后或系统终止应用程序启动后首次启动应用程序时,就会发生冷启动。这种类型的启动在最小化启动时间方面提出了最大的挑战,因为与其他启动状态相比,系统和应用程序要做的工作更多。在冷启动的前期,系统执行三个任务:加载并开始运行APP启动后立即显示空白window页面用于后续页面显示创建App进程一旦系统创建了应用程序流程原创 2021-03-29 21:31:19 · 262 阅读 · 0 评论 -
【源码学习】关于IdleHandler
【源码学习】关于IdleHandlerIdleHandler,不知道你们是否了解,反正对于我来说比较陌生,在我的业务里好像从来没有用过,而一些面试官却会问到的知识点。真是’面试是学习的最好方式‘,既然别人问到了,那我们就来了解一下,这到底是什么怎么样的一个存在,保持好奇心。IdleHandler是什么它是一个接口它存在于MessageQueue中,被定义为发现一个线程开始进入等待消息的状态的回调接口 /** * Callback interface for discovering wh原创 2021-03-24 16:39:03 · 243 阅读 · 0 评论 -
[源码学习]ViewModel是什么?
[源码学习]ViewModel是什么?ViewModel是Android架构组件包Jetpack的一个组件,它也是MVVM应用架构中的核心(Model-View-ViewModel),所以我们有必要学习一下ViewModel的基本原理学习源码,我们还是老规矩,先看类结构图。你没看错,ViewModel作为一个抽象类,只有一个空方法,我们来看看这个类的介绍(Google developer官网介绍)ViewModel类旨在以生命周期感知的方式来存储和管理UI相关的数据。ViewModel允许数据原创 2021-03-23 17:45:29 · 1070 阅读 · 0 评论 -
OkHttp源码分析自学
OkHttp源码学习过程记录本篇主要用于记录自己学习OkHttp源码的过程,如果大家看到有错误的地方,请一定指正,发布文章最怕的就是误导别人。我会按照我个人总结的步骤来一步步学习源码,可能方式上也不是最好的,也请大家多多包涵。OkHttp的优点以下来自okHttp官网说明HTTP/2允许指向同一个Host的请求共享一个socket连接池减少请求延迟GZIP压缩下载大小通过缓存请求返回结果减少重复请求使用简单,它支持同步和异步请求针对优点逐个分析HTTP/2允许指向同一个host的原创 2021-03-23 14:46:23 · 320 阅读 · 0 评论 -
[源码学习]ReentrantLock那些事
[源码学习]ReentrantLock那些事作为面试中肯定避免不了会被问到的多线程处理机制,ReentrantLock也是出场率很高,我们先列出几个问题,然后有针对性的从源码中找到答案ReentrantLock的实现原理ReentrantLock相较于Synchronized的优势我个人习惯看一下官方文档的说明,下面简单翻译一下具有与使用同步方法和语句访问的隐式监视器锁相同的基本行为和语义的可重入互斥锁,但具有扩展功能。这句话比较简单,不过里面的关键词也是我们经常面试的重点,例如什原创 2021-03-22 15:44:54 · 115 阅读 · 0 评论 -
【源码学习】线程池源码自学篇
【源码学习】线程池源码自学篇线程池作为项目中经常用到的类,也在面试中备受青睐,个人对于源码也只是读过一些,很多知识点都是一知半解,借此机会自己再温故一下。我是在边自学边写这些东西,可能语言上或者逻辑上不太完善,请大家不要介意。认识线程池线程池是什么?官网解释:线程池主要解决两个问题在需要执行大量线程的场景,减少创建每个线程带来的开销,从而提升软件性能它提供了一些方法来约束和管理执行任务集合时消耗的资源(包括线程)我们先看一下这个ThreadPoolExcutor的类图,简单有一个原创 2021-03-19 14:38:47 · 150 阅读 · 0 评论 -
关于Android 自定义属性 declare-styleable 的学习
学习这个是因为我看到好多自定义控件都用到了自定义属性,那么接下来我们就从实战的角度出发,看怎么才能创建自定义属性并且运用起来。第一步:巧妇难为无米之炊,首先我们得写一个自定义属性的xml出来,书写的方法如下所示: 最外面的标签,declare-styleable 中文翻译“样式 申明”通过为其name 属性设置内容,我这个原创 2015-05-16 17:48:01 · 773 阅读 · 0 评论 -
【Android面试知识点系列】Activity的爷爷ContextWrapper、父类ContextThemeWraper相关
在开始介绍四大组件之前,我们需要了解一些关于他们的父类的细节,这样有助于我们更好的理解四大组件。上一篇我们介绍了Context,这个抽象类涵盖了很多我们所熟知的方法,也是Android访问应用资源的基础。那么我们接下来看它的子类也是Activity的爷爷ContextWrapper又做了那些封装。ContextWrapper的主要用途? 该类是对Context的代理,代理了Cont...原创 2018-03-20 23:46:18 · 578 阅读 · 0 评论 -
【Android面试知识点】Activity相关
Activity是Android的四大组件之一,也可以说是出镜率最高的一个类,里面的知识点可以说是非常多,也是面试官必问的,接下来我们就通过学习提问的方式,来学习源码,顺便看看可能有哪些在面试中可能问到,因为Activity的知识点太多,所以可能涵盖不全,还请见谅。Activity的生命周期 Activities在Android系统中是由一个叫做Activity 栈的来管理的,当一...原创 2018-03-26 13:53:44 · 151 阅读 · 0 评论 -
关于Android java.lang.RuntimeException: java.net.UnknownHostException: services.gradle.org
问题描述:下载了一个新的工程遇到,无法下载gradle包的问题,错误日志如下Downloading https://services.gradle.org/distributions/gradle-4.1-all.zipException in thread "main" java.lang.RuntimeException: java.net.UnknownHostException...原创 2018-08-22 17:48:02 · 7284 阅读 · 0 评论 -
关于阿里热修复框架Sophix集成
最近在做一个手表项目,由于手表平台对于应用的更新方式有限制,流程比较繁琐,所以考虑使用热更新框架来做,市面上面比较火的就是(表格1来自Tinker官网)TinkerQZoneAndFixRobust类替换yesyesnoSo替换yesnono资源替换yesyesno全平台支持yesyesyes即时生效nonoyes...原创 2018-10-17 13:37:05 · 841 阅读 · 0 评论 -
为什么要在Android研发中使用RxJava
为什么要在Android研发 中使用RxJava【翻译】原文链接https://medium.com/@lpereira/why-should-we-use-rxjava-on-android-c9066087c56c如有侵权,请立即告知!Reactive Extensions(Rx)是一组接口和方法,它们为开发人员提供了一种快速解决问题,简单维护和易于理解的方法。RxJava提供了一...翻译 2019-02-21 18:54:23 · 330 阅读 · 0 评论 -
DexGuard 与 ProGuard区别
DexGuard 与 ProGuard区别原文链接https://www.guardsquare.com/en/blog/dexguard-vs-proguardDexGuard基于ProGuard。这就是为什么升级到DexGuard如此容易的原因。但这两种产品却提供的功能差异很大。ProGuard是Java字节码的通用优化器,而DexGuard为Android应用程序提供高级保护。在本博...翻译 2019-04-28 14:40:26 · 6286 阅读 · 0 评论 -
Android线程:你想知道的一些知识
Android线程:你所要知道的一切翻译自https://www.toptal.com/android/android-threading-all-you-need-to-know每个Android开发人员都需要在他们的应用程序中处理线程。在Android中启动应用程序时,它会创建第一个执行线程,称为“主”线程。主线程负责将事件分派到适当的用户界面小部件以及与Android UI工具包中...翻译 2019-05-09 16:50:31 · 317 阅读 · 0 评论 -
【Android面试知识点系列】Context相关
Context是大家比较熟悉的一个类,但是里面有好多我们不怎么熟悉的知识点,接下来就让我们通过学习提问的方式,学习Context类源码。Context是一个接口还是抽象类? 抽象类,通过源码可以知道。public abstract class Context {Context的主要用途 获取一个应用环境的相关全局信息,例如获取资源、访问classes、启动Acti...原创 2018-03-20 16:15:37 · 357 阅读 · 0 评论 -
【Android面试知识点系列】Message相关
Message,是一个携带有数据的对象,handler通过发送该对象,完成消息的传递,跨线程的处理等。我们通过源码来学习在有哪些潜在的知识点。msg.arg1 与 msg.arg2一般在什么场景下使用? 如果传输的数据只是简单的interger类型,这两个参数是相对于setData方法更加低成本的方法,setData开销相对更大一些相对于new Message,为什么obtain...原创 2018-03-19 23:59:54 · 236 阅读 · 0 评论 -
EditPlus正则表达式 替换字符串开头
EditPlus正则表达式 替换字符串开头、结尾前言项目中需要对产品组给的字符串进行统一的处理,因为他们给出的是这样子的。 我怎么在颤抖 我怎么在震动 好晕好晕,小主人你在做什么 好晕好晕 别晃了,快要不能呼吸了 快停下,好晕好晕 快停下,脑袋晕掉了 哎呀好晕这种格式的字符原创 2015-09-28 16:23:33 · 1710 阅读 · 0 评论 -
ButterKnife学习
Android 注入利器 Butterknife 实战篇前言之所以想去尝试注入这种方式去编写相关代码,还是因为客户端的涉及view的代码看起来太多了。而注入的方式,可以有效的减少这种代码数量。Butternife github 地址http://jakewharton.github.io/butterknife/实战步骤如果使用eclipse 开发 请下载最新ButterKnife jar包;原创 2015-07-23 15:33:22 · 652 阅读 · 0 评论 -
SVN Commit Failed Transaction is out of date问题
SVN Commit Failed Transaction is out of date问题 Transaction is out of datesvn: Commit failed (details follow):svn: Directory '/otherProject/……/***ek' is out of date解决方法:右键项目 Team–>update(更新)一下即可原创 2015-07-22 16:40:22 · 2325 阅读 · 0 评论 -
第一个servlet学习
First Servlet(Servlet 学习日记)前期准备IDE: MyEclipse 2014详细步骤新建一个web project右键新建servlet 3.代码详细如下import java.io.DataOutputStream;import java.io.IOException;import java.io.PrintWriter;import javax.servle原创 2015-08-01 12:47:34 · 700 阅读 · 0 评论 -
Gson初体验
Gson是google 官方出品的json解析库,通过gson你可以方便的操作json数据,以下通过从 解析json数据和封装json数据来说明一下它的厉害之处。json数据解析:首先如果我们面对一个简单的json 数据:如下所示:{"age": 18,"name": "jack","address": "china","phoneNum": "1312045756原创 2015-04-30 16:53:23 · 457 阅读 · 0 评论 -
push apk 到手机目录,并且成为内置APP
第一步,root手机第二步:打开cmd 输入adb shell 第三步:输入 mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system第四步:chmod 777 system第五步:cd system第六步:chomd 777 app第七步:cd app第八步:push xx.apk 重启手机即可原创 2015-04-17 13:40:28 · 1727 阅读 · 0 评论 -
解决 Initializing Java Tooling 出现的问题
问题症状:工作中eclipse崩溃,再次启动后cpu占用99%,状态栏一直显示Initializing Java Tooling: (1%)。 解决方案:删除\workspace\.metadata\.plugins\org.eclipse.core.resources\.projects目录,重新导入工程即可。转载 2015-04-07 09:00:19 · 645 阅读 · 0 评论 -
代码整洁之道(2)
代码整洁之道-学习2原创 2015-10-13 20:46:50 · 615 阅读 · 0 评论 -
代码整洁之道(4)
代码整洁之道(4)最重要的部分 第十七章是Bob大叔对于代码整洁的原则的总结。对于我们很有指导意义。希望大家以后可以参考着对于自己的项目来进行一次整理。注释C1不恰当的信息: 让注释传达本该更好地在源代码控制系统、问题追踪系统或者任何其他记录系统中保存的信息,是不恰当的。例如修改历史记录只会用大量过时而无趣的文本搞乱源代码文件 。通常,作者、最后修改时间、SPR数等元素不该在注释中出现。注原创 2015-10-15 18:54:29 · 650 阅读 · 0 评论 -
【Android面试知识点系列】MessaeQueue相关
MessageQueue也是面试中与Handler、Looper是Handler问题套餐系列之一。那么究竟它又有什么潜在的知识点呢?让我们一起从源码出发。MessageQueue通过什么方法将Message对象添加进来?在什么时候执行该操作? MessagQueue通过enqueueMessage(Message,long)方法将Message添加进来,添加的主要流程为,如果该消息...原创 2018-03-19 23:17:10 · 345 阅读 · 0 评论 -
【Android面试知识点系列】Looper相关
Looper是一个面试中经常被用来问的知识点,我这里也只是总结一下通过看Looper源码可能在面试中问到的知识点,还是推荐大家多看源码。 Looper在Handler机制中,就像是一个传送带的电动机,它驱动着传送带(MessageQueue)不断的运输货物(message),handler类似于往传送带上面放置消息的机械手臂。不知道这个比喻是否恰当。默认线程中是否存在Loope...原创 2018-03-17 23:17:57 · 340 阅读 · 0 评论 -
Youtube 视频自动播放
最近在做一项目的时候,需要播放Youtube视频。播放方式大体有三种 1. WebView(我最终用的) 2. Youtube SDK(需要谷歌开发者账户) 3. VideoView 其他两种方式大家自行研究,本篇想说的时候在使用WebView的时候遇到的不能自动播放问题。 注:Demo中使用的是kotlin首先说一下webview的正常加载Youtube视频的逻原创 2017-07-18 20:01:45 · 22006 阅读 · 3 评论 -
你是哪个级别?(工程师级别划分)
工程师的划分初级工程师(实习生)中级工程师(普通员工,小组长)高级工程师(CTO,技术研发领头人)初级工程师和入门级别基本上可以等同,他们一般都是刚出校门,或者么有实际的开发经验。 少于两年的工作经验,他们会被分配复杂度较低的工作,例如,一个项目中的小模块。或者验证性demo 他们掌握的知识是他们以为他们掌握的10%,甚至更低。通常他们没有经历过一个完整的项目周期,知识面也比较少,所以给原创 2016-09-24 14:06:28 · 19286 阅读 · 0 评论 -
Android性能优化:SparseArray
当我们在使用HashMap的时候,会弹出提示:use SparseArray<E> instead of for better performance 和HashMap的不同点还是挺多的,不过大部分资料都从网上可以查到,可以参考Android编程之SparseArray详解 我这里主要是想自己记录一下要点采用二分法查找算法,因为SparseArray存储数值的方法是按照key值大小排列有原创 2016-03-24 09:56:40 · 586 阅读 · 0 评论 -
Android Studio 导入so库
很少使用AS,特别是对于AS2.0更是不熟悉。 不过AS确实也有比Eclipse方便的地方,我们要用于尝试新鲜事物加油哦。 言归正传,关于AS中是如何导入so库,在网上搜了很多,给出的说法都不一样,最终通过实践,发现了一个适合我的IDE AS2.0的方法。步骤1:把so库放在指定cpu 架构的目录下,例如 armeabli 步骤2:在gradle 中android{}结构体内 添加 sour原创 2016-02-27 21:00:01 · 447 阅读 · 0 评论 -
AES+JNI 加密方案
首先Aes加密方案比较简单,也比较高效。至于它的优点,大家自己去网上搜索吧。我这里只是说一种android上应用AES的方案。 至于AES的代码大家也可以从网上搜索到,我这里直接贴上吧package com.turingfac.encryptiondemo;import java.security.SecureRandom;import javax.crypto.Cipher;import ja原创 2015-12-04 14:38:12 · 2761 阅读 · 0 评论 -
android加壳利器-apkprotectlite
最近由于项目需要针对APK进行加密,(proguard 加密过于简单)。但是象360加固等在线加密工具,又担心资料泄漏,所以决定找一个离线的加壳工具,搜索了一下还是apkprotectlite比较好,虽然2013年就停止维护了。 接着问题来了,我的电脑是64位的,装的是jre 也是64位的,但是该工具只识别32位jre。很简单去官网下载一个jre 6 32位的就可以了。加密时间不长2分钟左右。原创 2015-12-08 14:50:09 · 4167 阅读 · 0 评论 -
Android 中 在listview 中使用checkbox 遇到的选择问题
在最近的一个项目中 需要在listview中的item 自定义布局中使用checkbox,本以为会很简单。代码就不上了。出现了滑动listview中 checkbox 选中结果错位的问题。查了很多资料,各种方法都尝试了一遍还是不行。但是最后还是stackflow 找到了一个可以解决的方案。因为我在自己的自定义Adapter 中 利用ViewHolder 来保存View 信息,但是由于 我每原创 2014-09-01 15:11:55 · 586 阅读 · 0 评论