自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

风行天下

一个Android开发者的学习之路

  • 博客(95)
  • 资源 (9)
  • 论坛 (6)

原创 Retrofit+okHttp+RxJava打造一款简单易用的Android下载框架

SimpleDownload 一款Android下载框架的讲解一、最终效果图,及使用方法二、本框架实现的功能特性三、关键功能源码说明1.文件下载和普通网络请求的不同2. 断点续传如何实现3. 如何得到文件下载进度4. 如何把回调切换到主线程本文介绍自己封装的一套下载框架。首先要知道,文件下载和我们平时调接口一样,要发起网络请求的,所以我们先找个合适的网络请求库,这里我们选择Retrofit+...

2019-12-18 21:37:58 142

原创 Android高级开发面试题总结(很全面,不含答案)

最新想换工作,于是着手改简历,准备面试题,参与面试等,找工作持续了一个月,参与了十几场面试吧,有一线大厂,也有潜力股小公司,面试过后,我都会把能想起来的面试题记录下来。现在事情告一段落,于是做一个总结。某视频app公司面试题:Activity启动模式。Activity生命周期,从A页面打开B页面,两个页面的生命周期。onStartCommand的返回值和参数的作用。Synchroni...

2019-12-12 20:49:24 4219 3

原创 带着问题看源码 — 面试必备:理解Java线程池的运行原理

简单来说,线程池就是一个线程管理器,可以管理一组线程使其可重复利用。使用线程池的好处在于可以减少创建和销毁线程的开销,同时可避免不受控制的创建新线程可能导致的OOM等问题。本文将按个人理解,对照源码来解答有关线程池的几个关键问题。线程池的构造方法的各个参数是什么作用?线程池对于新来的任务,会怎么分配?Java默认提供的线程池有哪几种?分别有什么特性,适用场景是什么?线程池是如何做到线...

2019-06-30 22:20:10 311

原创 读懂Volley,必须要理解的几个问题

Volley是一个应用广泛的网络请求开源框架,由Google于2013年推出,它可扩展性性强,适合于数据量小,请求频繁的网络请求,用来加载网络图片也很方便,GitHub地址:https://github.com/google/volley。关于Volley的使用介绍和源码解析,网络资料很多,这里就不再写了,可参考:想看框架原理:Volley 源码解析更详细的从使用到源码解析:郭霖的《Voll...

2019-03-14 22:51:09 368

原创 Android组件化开发的实现(二)Android组件之间页面如何跳转和传递数据

前言上一篇文章Android组件化开发的实现(一),讲了组件化架构首先要解决的几个问题:一.如何统一管理编译环境二.如何实现各个组件既能单独调试运行,又能集成到整体里三.如何避免组件之间资源引用本篇文章,我们来讨论组件化架构要解决的一个最重要的问题:四、组件之间如何跳转,传递数据。本文所对应的示例代码,已经上传到这里:https://download.csdn.net/downloa...

2018-12-28 23:54:56 2261 2

原创 Android组件化开发的实现(一)如何统一管理编译运行环境

现在稍微有点规模的App项目,都会采用组件化的开发方式。组件化通俗来说就是把app分成多个部件,各个部件职责较为单一,可以单独修改调试,也可以集成到一起发挥作用,这样就能很方便进行团队协作和版本更新。组件化开发需要解决的几个问题:一.如何统一管理编译环境二.如何实现各个组件既能单独调试运行,又能集成到整体里三.组件之间如何跳转,传递数据四.如何避免组件之间资源引用首先,我们新建一个项...

2018-12-25 22:40:03 1006 1

原创 对ThreadLocal在Handler中的应用的一些理解

前言 JDK源码的ThreadLocal类和Android SDK的ThreadLocal类细节略有不同,但原理和实现的功能是相同的。本文的代码均来自Android SDK源码。ThreadLocal可以翻译为“线程内部存储”,它不是一个线程,而是用于存储对象,线程内部获取到的这个对象是唯一的,而不同线程获取的这个对象则是不同的对象。也即,这个对象的作用域是线程,而不是平常我们使用的包内...

2018-08-02 10:25:24 1286 2

原创 从源码简要分析Handler的原理

Handler我们经常会用到,一般可以用来处理延时任务,或者进行异步耗时操作的同时更新UI等。在使用过程中,不知道大家是否和我以前初学的时候一样有这样的疑惑:一般我们都是在UI线程新建static hander对象,并且实现了它的HandleMessage()方法,然后在其他任何地方通过sendMessage()方法发送的消息,最后都会被handleMessage()所处理,包括子线程里调...

2018-07-24 01:09:57 156

原创 Android AsyncTask的使用及源码解析

AsyncTask, 翻译成中文就是“异步任务”,顾名思义它就是用来处理不同线程相互协作的问题的。 常用的场景比如从网络下载图片并显示的过程,“下载”这个过程得放在后台线程里,而更新进度以及显示图片需要在主线程完成,这时候,用AsyncTask就很方便了。先介绍一下AsyncTask类的一般使用方法和注意事项: AsyncTask类是个抽象类,使用前必须继承并实现它的重要方法:clas...

2018-07-09 11:52:02 586

原创 Android 触摸事件分发和处理机制解析(一)Activity篇

在我们自定义view或者嵌套view时,经常需要处理滑动事件,点击事件等各种交互事件。在处理过程中,我们可能会遇到事件不响应,滑动和点击事件冲突等问题,这时候,如果我们理解Android触摸事件的分发和处理,处理起来就会得心应手。刚开始接触Android触摸事件分发和处理机制的时候,往往会一头雾水,因为处理触摸事件的地方太多了。比如,我们可以对某个activity里的view设置onTou...

2018-03-13 10:44:39 331

原创 Android开发笔记

● ListView几个有用的属性:android:divider="@color/transparent" //设置Listview的各个item之间的分割线颜色为透明,也就是不显示分割线android:listSelector="@android:color/transparent" //设置各个item被点击时的颜色变化,透明则为无变化android:overScrollM...

2016-02-25 23:31:41 667

原创 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 66

原创 Android Retrofit与Spring后台配合,实现单张、多张图片上传功能

前言最近在学写后台接口,想做个图片上传接口与Android客户端配合使用。Android这边我用的Retrofit网络请求框架。但是发现我把Android这边写好了,后台不知道该怎么接收;后台接口定义好了,Android这边不知道怎么传参。网上的资料也基本都是只讲一方面的,不讲怎么配合使用。那么我自己研究了一下实现了功能,在这里总结下。后台接口这里为了更详细的说明使用方法,我加了个use...

2020-03-09 18:54:19 194

原创 如何研究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 1081 1

原创 前端学习笔记

父布局宽度不固定的情况下,子元素如下设置可以水平居中:.child { width: fit-content; width: -moz-fit-content; width: -webket-fit-content; margin: auto;}父布局如下设置,可以使子元素们垂直居中:.parent { //设置...

2019-12-06 11:02:48 423

原创 Vue+ElementUI实现两级、可动态扩展表头的表格

最近在搞前端开发,遇到个需求,要实现下面这样的列表:需求描述:其中计划数量是要支持动态变化的,而阶段数量也要支持动态变化。比方说图中是3个计划,每个计划包含四个阶段。可能过段时间数据变成了2个计划,每个计划3个阶段,数据这样改变后,前端表格也要能正常显示。而后台的接口也没提供,需要我自行确定了数据结构,做出显示逻辑。那么首先思考一下,难点有两个,一个是二级表头,一个是表头要支持动态变化。我...

2019-11-22 09:38:48 2093 1

原创 RxJava用法入门及操作符讲解,简单易懂

RxJava基础用法讲解:本篇文章从最基础的RxJava讲解,说明RxJava的基本操作符的用法及作用:RxJava是基于观察者模式的,简而言之就是观察者订阅了被观察者,然后被观察者产生的数据变化会通知到观察者,观察者从而作出反应。这里就不多做讲解了。在RxJava里,观察者用Observer类或者Subscriber类表示,其中后者是前者的实现类,两者用法基本相同。被观察者用Observ...

2019-10-16 20:55:42 454

原创 Retrofit2框架学习

一、Retrofit概述Retrofit是一款开源网络框架,由Square公司推出的,目前最新版本是Retrofit2,源码地址 https://github.com/square/retrofitRetrofit的推出,主要是为了对Square公司推出的另一款网络请求框架OKHttp做封装。(Retrofit并不直接发起网络请求,网络请求仍然是由OkHttp发起的。)Retrofit2+O...

2019-08-23 15:38:25 848

原创 自定义注解实现简单的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 263

原创 OKHttp3网络框架流程简介

okhttp是一个开源的网络请求框架,由square公司发布,目前比较流行的版本是okHttp3。本文只对okHttp3做大致讲解,不具体分析源码细节等。就从如何使用开始讲起,okHttp3简单的使用步骤如下:1.得到OkHttpClient对象OkHttpClient okHttpClient = new OkHttpClient.Builder() //建造者模式,可添...

2019-08-10 17:02:50 304

原创 AndroidManifest中meta-data动态修改的问题

本文记录一下我在研究Android的meta-data所得的一些收获和坑,希望大家少走弯路。项目中集成一些第三方的API时,按其官方文档,经常需要在AndroidManifest文件中的application标签下加上meta-data配置。比如如下友盟的配置:一、meta-data的配置和动态获取 <application android:name=".MyA...

2019-07-17 10:59:29 4058

原创 真实有效,解决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 12870 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 4348

原创 Android XML解析之PULL解析 简单示例讲解

上一篇文章用一个简单例子讲了下SAX方式解析XML文件的用法及特点,可点击查看:Android XML文件解析之SAX解析 简单示例讲解本篇文章,我们接着用个简单例子展示一下PULL方式解析XML。先介绍下PULL方式解析XML的特点,它和SAX方式的相同之处是都是事件驱动的流式解析方式,一边读取XML内容一边解析,不可暂停或者倒退,直到结束。效率高,占用内存小。而和SAX解析的不同点在于...

2019-03-06 20:51:25 842

原创 Android XML解析之SAX解析 简单示例讲解

Android开发里,解析xml是很常见的场景了,其中SAX解析与PULL解析是两种比较常用的解析方式。还有DOM解析不太常用,因为它需一次性把xml文件加载到内存里,如果是大文件的话,很占内存,影响性能。而SAX(Simple API for XML)解析是事件驱动的流式解析方式,并不是把xml全部加载到内存,而是一边读取一边解析,不可暂停或者倒退,直到结束。在解析过程中,会判断当前的节点及内...

2019-03-05 23:08:02 246

原创 对HTTP和HTTPS的一些认识

HTTP(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。HTTPS (HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 比HTTP多了加密的步骤,用于安全的 HTTP 数据传输。HTTP版本演变:http协议...

2019-01-07 21:41:44 114

原创 Java8特性lambda表达式、函数式接口和方法引用的一个应用实例

前几天在一个直播课程上看到这样一种写法:public class AtomicDemo { public static void hellooo() { System.out.println("hello"); } public static void main(String[] args){ new Thread(Atomic...

2018-12-12 21:22:02 271

原创 对Thread的start()和run()的一些认识

通常我们需要在新线程里执行操作时,可以这么写:写法一: 在需要的地方调用new MyThread().start(),并重写匿名Thread类的run方法,如下; new Thread() { @Override public void run() { System.out.println("Thread run"); } }.start();输出:Thre...

2018-12-06 13:43:18 1656

原创 Service的onStartCommand方法的返回值和参数详解

前言: Android Service的onStartCommand方法是在通过startService()的方式启动Service的时候被调用的声明周期方法。需要注意的是,如果多次用startService()尝试启动同一个Service,该Service的onStartCommand方法就会多次被调用。但是该Service的onCreate方法只会被调用一次,只会创建一个Service实...

2018-09-09 02:34:32 3157

原创 如何动态获取Android系统属性

Android设备有很多系统属性,比如说Android版本号,比如品牌,型号,比如厂商操作系统的版本号等,我们经常会要用到这些属性,那怎么获取呢?最简单的办法,就是连接USB调试后,在命令行输入 adb shell getprop xxx查看结果,其中xxx是系统属性名称。当然我们首先得知道这个属性名称才行。 但是如果我们不只是要看到结果,还要在代码里动态获取并且使用,该怎么办呢?可以用如下...

2018-07-19 18:52:04 3133

原创 SharedPreferences数据存储的apply()和commit()区别

练习SharedPreferences的使用:存数据: SharedPreferences sp = getSharedPreferences("data", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString("name", "lala");

2018-07-12 18:51:08 4382

原创 一个Bug案例的解决过程:连续输入错误的PIN码,不能实现第二次倒计时30s才能重试

此问题是草稿箱存了两年的一篇文章,还是重新发表了吧……^.^ 当时改Bug的时候Settings功能出现的一个问题,解决过程收获蛮多,所以写下总结。问题的现象: 1.打开 Settings → Security →Screen lock,设置PIN。 2.重新打开该选项,输入错误的PIN五次,手机会开始提示30s后才能继续尝试。 3.等待30s后,再次输入错误的PIN五次,观察现象。...

2018-07-09 13:55:10 1086

原创 Android应用打包时签名更新,导致微信支付失败的问题

前言: 搞Android开发的对apk打包都很熟悉了,使用Android studio打包应用的时候,如果要生成release版本的安装包,需要的操作如下: 点击菜单的build -> generate signed apk,然后选择release或者debug版本,选择签名,输入密码进行打包。打包为什么需要签名呢?签名的意义在于保证应用的安全性和唯一性,具体来说,如果没有签名,...

2018-04-19 21:25:23 2839

原创 Android 触摸事件分发和处理机制解析(三)View篇

本文未完成,持续更新中——————– 在我们自定义view或者嵌套view时,经常需要处理滑动事件,点击事件等各种交互事件。在处理过程中,我们可能会遇到事件不响应,滑动和点击事件冲突等问题,这时候,如果我们理解Android触摸事件的分发和处理,处理起来就会得心应手。本系列分析前两篇,建议先看看: Android 触摸事件分发和处理机制解析(一)Activity篇 Android 触摸...

2018-03-16 12:51:53 166

原创 Android 触摸事件分发和处理机制解析(二)ViewGroup篇

本文未完成,持续更新中——————– 在看本片文章之前,建议花几分钟先看看我的上一篇,作为理论基础: Android 触摸事件分发和处理机制解析(一)Activity篇不想看那么多的话,贴上上一篇最后的结论,记住这些再往下看: 1. 触摸事件是从Activity的 dispatchTouchEvent() 开始处理的。 2. Activity的dispatchTouchEvent(...

2018-03-16 10:42:11 222

原创 使用webview时,JS与Android互相传值的方法

在Android项目中,有时候整个页面是个webview,用来加载我们制作好的网页。 那么时常会有网页和app进行交互的需求。首先,webview需要作如下配置,下面几行都是必要的,还有其他配置未列出,可参考: Android webview里加载显示网页,显示进度,点击网页链接跳转到app页面//支持JavaScriptWebSettings setting = webview...

2018-03-01 17:55:09 10082 5

原创 AIDL实现两个进程通信

前言 aidl是用于Android 进程间通信的一种方式,通过使用aidl,A进程可以调用B进程的Service中的方法,从而实现数据传递和通信。下面用一个简单实例一步步实现aidl通信,此次实例需要一个Server项目和一个Client项目,我们想实现的是,Client进程可以从Server进程中获取数据。Server端实现新建Server空项目,然后按如下方式新建aidl文件: ...

2018-02-28 22:27:14 485

原创 ios App加载网页,点击网页链接调用App处理

一、如何在APP里加载本地html文件内容:首先准备一个html文件,比如内容如下:<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Style-Type" conte

2018-01-23 15:58:11 2596

原创 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 1040

原创 Android “设置”应用的各项如何用代码调用的方式打开

测试设置各个项能否被打开的方法: 1.如果能获取页面的包名和页面名(而且不是subsettings),则通过指定包名和页面名的方式进行测试。先查看当前页面,命令行下输入adb shell dumpsys activity | findstr “mFocusedActivity”查看结果。 例如,获取到“热点”页面对应的包名/页面名为com.android.settings/.TetherSett

2017-11-28 16:08:02 662

操作系统实验报告,西电操作系统课程

西电操作系统课程报告。文档包括两部分 一。LINUX/UNIX Shell命令部分的考察 二。编写一个Shell过程完成如下功能: 1.合并两个$1、$2文件为$3,并显示。 2.如果缺少$3,那么先报告缺少$3,将合并后的内容输出到CHENG.TXT,显示。 3.如果缺少$2、$3那么先报告缺少$2、$3,只显示$1的内容

2013-06-21

数字图像处理 BMP文件操作

数字图像处理课程作业。读取BMP文件并对比两幅图像,生成结果图像,结果图像是差别之处

2013-06-21

编译原理 课后答案

编译原理第二版答案 西安电子科技大学出版社 刘坚著

2013-04-07

微机原理上机实验报告

2.实验内容 (1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。 (2)在屏幕上显示自己的学号姓名信息。 (3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。

2013-01-02

计算机组成原理报告

计算机组成原理上机实验报告 内容 : 在部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本实验将能在微过程控制下自动产生各部件单元控制信号,实现特定的功能。实验中,计算机数据通路的控制将由微过程控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

2013-01-02

脉冲波形的产生与整形概述

1 555定时器的原理 2 用555定时器组成多谐振荡器 3 用555定时器组成单稳态触发 器 4 用555定时器组成施密特触发器

2013-01-02

数字电路实验报告

数字电路实验,包括设计数据选择器,译码器,编码器等,再用multiplus++进行仿真处理

2011-12-18

Android apk 反编译工具

Android 反编译工具,自己在用的。 包含以下工具: apktool:得到资源文件等。 dex2jar:把dex文件转换成jar包。 jd-gui:查看Jar包代码。 Android apk 研究方案看这里:https://blog.csdn.net/fenggering/article/details/103482057

2019-12-12

组件化开发示例代码

代码所对应的文章在这里: https://blog.csdn.net/fenggering/article/details/85254610

2018-12-25

Java 8的双冒号写法为什么可以当成参数传入Thread的构造方法里?

发表于 2018-12-08 最后回复 2020-06-20

Java 接口中不能定义非抽象方法吗?

发表于 2016-02-02 最后回复 2020-01-07

能用反射获取单例对象,并且得到它当前的值吗?

发表于 2019-02-02 最后回复 2019-04-19

Android Service用getInstance的方式获取实例可以吗?

发表于 2018-02-06 最后回复 2018-02-09

乐视手机报错IllegalStateException: String '6.0-1497177565' is not in the string pool

发表于 2017-08-22 最后回复 2018-02-09

如何在build.gradle中调用自定义的方法?

发表于 2017-11-15 最后回复 2017-11-16

空空如也
提示
确定要删除当前文章?
取消 删除