Android
文章平均质量分 75
此去正年少
每天进步一点点
展开
-
ARouter路由框架原理简单分析
前言ARouter是阿里巴巴推出的一款Android路由框架,官方介绍:一个用于帮助 Android App 进行组件化改造的框架,支持模块间的路由、通信、解耦。github文档地址:https://github.com/alibaba/ARouter/blob/master/README_CN.md一、ARouter解决的问题一般我们使用ARouter的目的,是为了解决组件间activity跳转的问题。众所周知,如果从Activity A跳转到B,原始写法可以这么写:startActivity原创 2020-08-04 16:29:20 · 1452 阅读 · 0 评论 -
Android Retrofit与Spring后台配合,实现单张、多张图片上传功能
前言最近在学写后台接口,想做个图片上传接口与Android客户端配合使用。Android这边我用的Retrofit网络请求框架。但是发现我把Android这边写好了,后台不知道该怎么接收;后台接口定义好了,Android这边不知道怎么传参。网上的资料也基本都是只讲一方面的,不讲怎么配合使用。那么我自己研究了一下实现了功能,在这里总结下。后台接口这里为了更详细的说明使用方法,我加了个use...原创 2020-03-09 18:54:19 · 1090 阅读 · 3 评论 -
Retrofit+okHttp+RxJava打造一款简单易用的Android下载框架
SimpleDownload 一款Android下载框架的讲解一、最终效果图,及使用方法二、本框架实现的功能特性三、关键功能源码说明1.文件下载和普通网络请求的不同2. 断点续传如何实现3. 如何得到文件下载进度4. 如何把回调切换到主线程本文介绍自己封装的一套下载框架。首先要知道,文件下载和我们平时调接口一样,要发起网络请求的,所以我们先找个合适的网络请求库,这里我们选择Retrofit+...原创 2019-12-18 21:37:58 · 621 阅读 · 0 评论 -
如何研究Android手机上已安装的一个app
如何深扒一个Android app1.手机上安装了一个app,如何得到它的包名?2.如何得到app安装路径?3. 如何得到安装包?4.如何反编译一个安装包?1.手机上安装了一个app,如何得到它的包名?手机连接USB调试,打开该app,windows命令行下敲 adb 命令:adb shell dumpsys activity | findstr ResumedActivitylinu...原创 2019-12-12 20:37:41 · 2033 阅读 · 1 评论 -
RxJava用法入门及操作符讲解,简单易懂
RxJava基础用法讲解:本篇文章从最基础的RxJava讲解,说明RxJava的基本操作符的用法及作用:RxJava是基于观察者模式的,简而言之就是观察者订阅了被观察者,然后被观察者产生的数据变化会通知到观察者,观察者从而作出反应。这里就不多做讲解了。在RxJava里,观察者用Observer类或者Subscriber类表示,其中后者是前者的实现类,两者用法基本相同。被观察者用Observ...原创 2019-10-16 20:55:42 · 2345 阅读 · 0 评论 -
Android 触摸事件分发和处理机制解析(一)Activity篇
在我们自定义view或者嵌套view时,经常需要处理滑动事件,点击事件等各种交互事件。在处理过程中,我们可能会遇到事件不响应,滑动和点击事件冲突等问题,这时候,如果我们理解Android触摸事件的分发和处理,处理起来就会得心应手。刚开始接触Android触摸事件分发和处理机制的时候,往往会一头雾水,因为处理触摸事件的地方太多了。比如,我们可以对某个activity里的view设置onTou...原创 2018-03-13 10:44:39 · 832 阅读 · 0 评论 -
Android应用打包时签名更新,导致微信支付失败的问题
前言: 搞Android开发的对apk打包都很熟悉了,使用Android studio打包应用的时候,如果要生成release版本的安装包,需要的操作如下: 点击菜单的build -> generate signed apk,然后选择release或者debug版本,选择签名,输入密码进行打包。打包为什么需要签名呢?签名的意义在于保证应用的安全性和唯一性,具体来说,如果没有签名,...原创 2018-04-19 21:25:23 · 3765 阅读 · 0 评论 -
Android AsyncTask的使用及源码解析
AsyncTask, 翻译成中文就是“异步任务”,顾名思义它就是用来处理不同线程相互协作的问题的。 常用的场景比如从网络下载图片并显示的过程,“下载”这个过程得放在后台线程里,而更新进度以及显示图片需要在主线程完成,这时候,用AsyncTask就很方便了。先介绍一下AsyncTask类的一般使用方法和注意事项: AsyncTask类是个抽象类,使用前必须继承并实现它的重要方法:clas...原创 2018-07-09 11:52:02 · 841 阅读 · 0 评论 -
一个Bug案例的解决过程:连续输入错误的PIN码,不能实现第二次倒计时30s才能重试
此问题是草稿箱存了两年的一篇文章,还是重新发表了吧……^.^ 当时改Bug的时候Settings功能出现的一个问题,解决过程收获蛮多,所以写下总结。问题的现象: 1.打开 Settings → Security →Screen lock,设置PIN。 2.重新打开该选项,输入错误的PIN五次,手机会开始提示30s后才能继续尝试。 3.等待30s后,再次输入错误的PIN五次,观察现象。...原创 2018-07-09 13:55:10 · 6216 阅读 · 0 评论 -
从源码简要分析Handler的原理
Handler我们经常会用到,一般可以用来处理延时任务,或者进行异步耗时操作的同时更新UI等。在使用过程中,不知道大家是否和我以前初学的时候一样有这样的疑惑:一般我们都是在UI线程新建static hander对象,并且实现了它的HandleMessage()方法,然后在其他任何地方通过sendMessage()方法发送的消息,最后都会被handleMessage()所处理,包括子线程里调...原创 2018-07-24 01:09:57 · 286 阅读 · 0 评论 -
如何动态获取Android系统属性
Android设备有很多系统属性,比如说Android版本号,比如品牌,型号,比如厂商操作系统的版本号等,我们经常会要用到这些属性,那怎么获取呢?最简单的办法,就是连接USB调试后,在命令行输入 adb shell getprop xxx查看结果,其中xxx是系统属性名称。当然我们首先得知道这个属性名称才行。 但是如果我们不只是要看到结果,还要在代码里动态获取并且使用,该怎么办呢?可以用如下...原创 2018-07-19 18:52:04 · 6248 阅读 · 0 评论 -
Android 触摸事件分发和处理机制解析(三)View篇
本文未完成,持续更新中——————– 在我们自定义view或者嵌套view时,经常需要处理滑动事件,点击事件等各种交互事件。在处理过程中,我们可能会遇到事件不响应,滑动和点击事件冲突等问题,这时候,如果我们理解Android触摸事件的分发和处理,处理起来就会得心应手。本系列分析前两篇,建议先看看: Android 触摸事件分发和处理机制解析(一)Activity篇 Android 触摸...原创 2018-03-16 12:51:53 · 356 阅读 · 0 评论 -
Android 触摸事件分发和处理机制解析(二)ViewGroup篇
本文未完成,持续更新中——————– 在看本片文章之前,建议花几分钟先看看我的上一篇,作为理论基础: Android 触摸事件分发和处理机制解析(一)Activity篇不想看那么多的话,贴上上一篇最后的结论,记住这些再往下看: 1. 触摸事件是从Activity的 dispatchTouchEvent() 开始处理的。 2. Activity的dispatchTouchEvent(...原创 2018-03-16 10:42:11 · 405 阅读 · 0 评论 -
使用webview时,JS与Android互相传值的方法
在Android项目中,有时候整个页面是个webview,用来加载我们制作好的网页。 那么时常会有网页和app进行交互的需求。首先,webview需要作如下配置,下面几行都是必要的,还有其他配置未列出,可参考: Android webview里加载显示网页,显示进度,点击网页链接跳转到app页面//支持JavaScriptWebSettings setting = webview...原创 2018-03-01 17:55:09 · 14832 阅读 · 6 评论 -
AIDL实现两个进程通信
前言 aidl是用于Android 进程间通信的一种方式,通过使用aidl,A进程可以调用B进程的Service中的方法,从而实现数据传递和通信。下面用一个简单实例一步步实现aidl通信,此次实例需要一个Server项目和一个Client项目,我们想实现的是,Client进程可以从Server进程中获取数据。Server端实现新建Server空项目,然后按如下方式新建aidl文件: ...原创 2018-02-28 22:27:14 · 834 阅读 · 0 评论 -
Android开发笔记
● ListView几个有用的属性:android:divider="@color/transparent" //设置Listview的各个item之间的分割线颜色为透明,也就是不显示分割线android:listSelector="@android:color/transparent" //设置各个item被点击时的颜色变化,透明则为无变化android:overScrollM...原创 2016-02-25 23:31:41 · 850 阅读 · 0 评论 -
Android webview里加载显示网页,显示进度,点击网页链接跳转到app页面
1.怎么在webView里加载网页,并且让网页能正常滑动,缩放,可交互? 先写一个布局文件,如下,主要是包含一个WebView:LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout原创 2017-06-06 11:43:59 · 3363 阅读 · 0 评论 -
ORMLite does not know how to store class java.util.ArrayList错误的解决
程序中要用开源库ORMLite保存一个自定义类的数据,其中这个自定义类有如下属性: @DatabaseField private String packageName; @DatabaseField private int id; @DatabaseField private int type; @DatabaseField private A原创 2017-12-19 13:59:07 · 1508 阅读 · 0 评论 -
Android “设置”应用的各项如何用代码调用的方式打开
测试设置各个项能否被打开的方法: 1.如果能获取页面的包名和页面名(而且不是subsettings),则通过指定包名和页面名的方式进行测试。先查看当前页面,命令行下输入adb shell dumpsys activity | findstr “mFocusedActivity”查看结果。 例如,获取到“热点”页面对应的包名/页面名为com.android.settings/.TetherSett原创 2017-11-28 16:08:02 · 1258 阅读 · 0 评论 -
对ThreadLocal在Handler中的应用的一些理解
前言 JDK源码的ThreadLocal类和Android SDK的ThreadLocal类细节略有不同,但原理和实现的功能是相同的。本文的代码均来自Android SDK源码。ThreadLocal可以翻译为“线程内部存储”,它不是一个线程,而是用于存储对象,线程内部获取到的这个对象是唯一的,而不同线程获取的这个对象则是不同的对象。也即,这个对象的作用域是线程,而不是平常我们使用的包内...原创 2018-08-02 10:25:24 · 2382 阅读 · 3 评论 -
Service的onStartCommand方法的返回值和参数详解
前言: Android Service的onStartCommand方法是在通过startService()的方式启动Service的时候被调用的声明周期方法。需要注意的是,如果多次用startService()尝试启动同一个Service,该Service的onStartCommand方法就会多次被调用。但是该Service的onCreate方法只会被调用一次,只会创建一个Service实...原创 2018-09-09 02:34:32 · 7874 阅读 · 3 评论 -
自定义注解实现简单的ButterKnife功能,简化findViewById和setOnClickListener
ButterKnife我们应该都很熟悉了,在编写布局的时候可以省略很多findViewById、setOnClickListener等代码,精简代码结构。但是项目中实现了组件化之后,ButterKnifeVersion 8.2.0 (2016-07-10)New: Support for library projects. Requires application of a Butter ...原创 2019-08-18 11:51:54 · 540 阅读 · 0 评论 -
Retrofit2框架学习
一、Retrofit概述Retrofit是一款开源网络框架,由Square公司推出的,目前最新版本是Retrofit2,源码地址 https://github.com/square/retrofitRetrofit的推出,主要是为了对Square公司推出的另一款网络请求框架OKHttp做封装。(Retrofit并不直接发起网络请求,网络请求仍然是由OkHttp发起的。)Retrofit2+O...原创 2019-08-23 15:38:25 · 1260 阅读 · 0 评论 -
OKHttp3网络框架流程简介
okhttp是一个开源的网络请求框架,由square公司发布,目前比较流行的版本是okHttp3。本文只对okHttp3做大致讲解,不具体分析源码细节等。就从如何使用开始讲起,okHttp3简单的使用步骤如下:1.得到OkHttpClient对象OkHttpClient okHttpClient = new OkHttpClient.Builder() //建造者模式,可添...原创 2019-08-10 17:02:50 · 583 阅读 · 0 评论 -
AndroidManifest中meta-data动态修改的问题
本文记录一下我在研究Android的meta-data所得的一些收获和坑,希望大家少走弯路。项目中集成一些第三方的API时,按其官方文档,经常需要在AndroidManifest文件中的application标签下加上meta-data配置。比如如下友盟的配置:一、meta-data的配置和动态获取 <application android:name=".MyA...原创 2019-07-17 10:59:29 · 10518 阅读 · 5 评论 -
真实有效,解决Android studio项目报错ERROR: Unable to resolve dependency for...Could not resolve project...
前两天改了项目的一些东西,提交后发现编译老是报错误,但是打包又没问题。报错信息如下:ERROR: Unable to resolve dependency for ‘:xxx@debugProduction/compileClasspath’: Could not resolve project :yyy.Show DetailsAffected Modules: xxx其中‘xxx’...原创 2019-07-12 23:50:22 · 21521 阅读 · 1 评论 -
使用uni-app的Native.js开发Android应用,基础语法说明
前言uni-app是一个开源前端框架,是用vue.js开发的,可以实现跨平台的开发。地址:https://github.com/dcloudio/uni-app而Native.js是使用uni-app开发时可以用到的一种开发技术,以下介绍摘自《5+ App开发Native.js入门指南》:http://ask.dcloud.net.cn/article/88本文只是对上面这个文章的一些摘抄和...原创 2019-05-24 09:56:28 · 16141 阅读 · 2 评论 -
读懂Volley,必须要理解的几个问题
Volley是一个应用广泛的网络请求开源框架,由Google于2013年推出,它可扩展性性强,适合于数据量小,请求频繁的网络请求,用来加载网络图片也很方便,GitHub地址:https://github.com/google/volley。关于Volley的使用介绍和源码解析,网络资料很多,这里就不再写了,可参考:想看框架原理:Volley 源码解析更详细的从使用到源码解析:郭霖的《Voll...原创 2019-03-14 22:51:09 · 731 阅读 · 0 评论 -
Android XML解析之PULL解析 简单示例讲解
上一篇文章用一个简单例子讲了下SAX方式解析XML文件的用法及特点,可点击查看:Android XML文件解析之SAX解析 简单示例讲解本篇文章,我们接着用个简单例子展示一下PULL方式解析XML。先介绍下PULL方式解析XML的特点,它和SAX方式的相同之处是都是事件驱动的流式解析方式,一边读取XML内容一边解析,不可暂停或者倒退,直到结束。效率高,占用内存小。而和SAX解析的不同点在于...原创 2019-03-06 20:51:25 · 1790 阅读 · 0 评论 -
Android XML解析之SAX解析 简单示例讲解
Android开发里,解析xml是很常见的场景了,其中SAX解析与PULL解析是两种比较常用的解析方式。还有DOM解析不太常用,因为它需一次性把xml文件加载到内存里,如果是大文件的话,很占内存,影响性能。而SAX(Simple API for XML)解析是事件驱动的流式解析方式,并不是把xml全部加载到内存,而是一边读取一边解析,不可暂停或者倒退,直到结束。在解析过程中,会判断当前的节点及内...原创 2019-03-05 23:08:02 · 638 阅读 · 0 评论 -
Android组件化开发的实现(一)如何统一管理编译运行环境
现在稍微有点规模的App项目,都会采用组件化的开发方式。组件化通俗来说就是把app分成多个部件,各个部件职责较为单一,可以单独修改调试,也可以集成到一起发挥作用,这样就能很方便进行团队协作和版本更新。组件化开发需要解决的几个问题:一.如何统一管理编译环境二.如何实现各个组件既能单独调试运行,又能集成到整体里三.组件之间如何跳转,传递数据四.如何避免组件之间资源引用首先,我们新建一个项...原创 2018-12-25 22:40:03 · 1663 阅读 · 1 评论 -
Android组件化开发的实现(二)Android组件之间页面如何跳转和传递数据
前言上一篇文章Android组件化开发的实现(一),讲了组件化架构首先要解决的几个问题:一.如何统一管理编译环境二.如何实现各个组件既能单独调试运行,又能集成到整体里三.如何避免组件之间资源引用本篇文章,我们来讨论组件化架构要解决的一个最重要的问题:四、组件之间如何跳转,传递数据。本文所对应的示例代码,已经上传到这里:https://download.csdn.net/downloa...原创 2018-12-28 23:54:56 · 3760 阅读 · 2 评论 -
Android高级开发面试题总结(很全面,不含答案)
最新想换工作,于是着手改简历,准备面试题,参与面试等,找工作持续了一个月,参与了十几场面试吧,有一线大厂,也有潜力股小公司,面试过后,我都会把能想起来的面试题记录下来。现在事情告一段落,于是做一个总结。某视频app公司面试题:Activity启动模式。Activity生命周期,从A页面打开B页面,两个页面的生命周期。onStartCommand的返回值和参数的作用。Synchroni...原创 2019-12-12 20:49:24 · 5245 阅读 · 3 评论 -
Android 在页面中显示打包日期
项目有需求,要求在app里显示安装包打包的日期,我的想法是: 1,在build.gradle中定义打包的日期变量。 2,在app里引用BuildConfig文件自动生成的变量并显示。实现如下: 先在Build.gradle中定义得到打包时间的方法,在文件内容最外层定义:def static releaseTime() { return new Date().forma原创 2017-11-16 11:00:44 · 1688 阅读 · 0 评论 -
Android应用结束自身进程的方法
有时候app中会有这样的需求:在某个时机触发后,程序需要销毁所有页面和后台服务,主动结束整个进程。怎么实现呢?管理activity一种方法是:在项目架构搭建时,就可以创建一个BaseActivity,让app的所有页面都继承它,然后用一个List去管理所有的activity,每打开一个activity,就将它添加到list中,activity销毁,则从list中移除。 这样当我们想销毁所有页面时,原创 2017-11-15 11:12:21 · 10662 阅读 · 1 评论 -
Android 项目中ButterKnife的基本使用
ButterKnife是一个开源的Android框架,方便的view绑定注解功能,可以省去大量的findViewById和setOnClickListener等代码,使开发更高效。下面就看看如何在Android Studio项目中配置使用ButterKnife:第一步:在Project的build.gradle中添加如下代码:buildscript { repositories {原创 2017-07-12 22:18:48 · 2214 阅读 · 0 评论 -
Android 如何判断手机处于电源充电状态还是USB连接状态?
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);Intent batteryStatusIntent = registerReceiver(null, ifilter);//如果设备正在充电,则您可以提取当前的充电状态和充电方式(无论是通过 USB 还是交流充电器),如下所示:// Are we cha原创 2017-03-02 14:46:21 · 13462 阅读 · 0 评论 -
Android 自定义Dialog的实现
最新实现了一个自定义Dialog的需求,先看看效果图: 下面说说如何实现:首先需要自定义一个Dialog类,继承自android.app.Dialog类。这个Dialog类就是要显示的对话框,包含双选按钮和单选按钮两种效果。原创 2017-01-25 16:16:52 · 41362 阅读 · 4 评论 -
Android onSaveInstanceState()和onRestoreInstanceState()调用时机
Android系统的回收机制会在未经用户主动操作的情况下销毁activity,而为了避免系统回收activity导致数据丢失,Android为我们提供了onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle savedInstanceState)用于保存和恢复数据。onSaveInstanceState(Bundle ou原创 2016-12-28 13:25:56 · 25901 阅读 · 9 评论 -
Android 实现自定义时间间隔,文字颜色的TimePicker
最近项目中有个要求,要求实现一个时间设置控件,要求可以设置的时间间隔为15分钟。怎么实现呢?首先,Android自带了一个TimePicker控件,但是其默认时间间隔为1分钟,而且没有提供修改间隔的接口。一、怎么解决自定义时间间隔的问题呢?从网上找到了办法,代码参考的是http://download.csdn.net/download/asdlai/6860699。 下面的setNumberPic原创 2016-11-30 15:50:29 · 9465 阅读 · 5 评论