自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

川峰的博客

知我者谓我心忧,不知我者谓我何求

  • 博客(110)
  • 资源 (4)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Flutter学习笔记&学习资料推荐

对Flutter的学习已经有一段时间了,这里做一下总结记录吧,可能主要是学习资料的总结,还有一些杂七杂八的学习笔记。 Flutter 初体验 先说说对Flutter的感受吧,总的来说上手还是比较容易的,因为他的思想理念跟React十分相似,都是通过状态管理控制UI界面的更新,甚至连setState的方法名都是一样的,如果你是学习过类似React的框架的话,将很容易理解,基本可以直接开撸。但是它有好的地方,也有不好的地方。 好的地方:一个是它的reload热加载到手机,这样写代码调试的时候不用每次运行.

2020-09-18 22:11:18 433

原创 Git忽略已经提交的文件

执行命令:git rm --cached .idea/gradle.xml,然后提交即可。如果报错,可尝试加上-f, git rm --cached -f .idea/gradle.xml注意,已经提交到Git服务器的文件,即便你更新了.gitignore文件,下次提交也是不会被忽略的,这个文件只针对尚未被提交的文件进行忽略起作用。详细参考:https://segmentfault.com/...

2020-02-25 18:57:17 510

原创 Android 10 出现"此应用专为旧版Android打造,因此可能无法正常运行。请尝试检查更新或与开发者联系"

在Android P(9.0)出现此弹窗,多数建议为`targetSdk > 17, minSdk> 17`, 最近测试反应在Android 10上也出现该弹窗,经测试targetSdk > 17时能够安装,但是会有弹窗提示,要去掉这个弹窗需要修改`targetSdk >= 23`即可, 但是修改23的话要记得加动态权限申请。出现此弹窗的关键代码是AppWarnings...

2020-02-24 17:48:25 15943 1

原创 Android常用adb命令

官方参考地址:https://developer.android.com/studio/command-line/adb.html?hl=zh-cn (可能需要翻墙,可以使用在线代理访问)基本命令:查看连接的设备 adb devices进入指定设备 adb -s serialNumber shell连接状态 adb get-state查看版本 adb version启动ADB服务 ad...

2020-02-24 12:46:29 442

原创 关于模块化的一些思考/记录

我这里所说的“模块化”可能是更加广义的理解概念,不限于具体的实现方式;通常模块化的目的是为了使得项目更加方便的管理,易于维护,这对于多人团队共同开发同一个项目或者项目业务体积日趋庞大的情况尤为重要。这里只是我对模块化的思考做一些随笔记录,并不是具体指导教程,如有想法欢迎交流。物理隔离所谓的物理隔离也就是代码文件的隔离,我认为这是实现模块化的第一首要任务,即保证你的代码文件相互分隔开来,一方面从...

2020-01-30 22:01:40 216

原创 Android MVP模式深入实践探索(二)

上一篇总结了MVP模式的基础结构,这一篇主要总结在MVP模式中该如何进行分类,即哪些属于View层,哪些该放在Presenter层,哪些该放在Modle层,如何从一堆杂乱的UI代码中将相关代码提取到MVP对应的层次当中。先从View层说起,对于View层其实是最好划分的,首先想到的是Activity、Fragment、Dialog等系统的组件,还有加载我们的布局文件,进行findView操作,对...

2019-07-04 21:47:42 181

原创 Android MVP模式深入实践探索(一)

其实MVP已经不算新东西了,写这篇文章的目的主要是为了把之前在项目重构中应用的MVP模式做一个整理、总结和记录,把实践代码做成一个可描述可理解的过程。一篇可能写不完,总共打算分几篇来记录,这将包括且不限于以下内容:MVP模式基础结构介绍MVP模式中如何分类,哪些属于View层,哪些该放在Presenter层,哪些该放在Modle层MVP模式中关于View层使用的数据类MVP模式中Vie...

2019-06-28 19:25:09 215

原创 Android Studio中资源文件夹的模块化配置

有时app中res下面的文件太多了想分一下类,如所有的布局文件都在layout文件夹下面,太多的话找起来不方便。一开始我想这个问题大概可以通过配置productFlavor来实现,但是productFlavor中不同的Flavor是互斥的,跟这个还不太一样的。下面是网上学来的分类分法,这里记录一下:第一种分法:gradle配置: sourceSets { main {...

2019-06-27 20:43:40 1353

原创 Android 7.0 AES加密报错:NoSuchProviderException: no such provider: Crypto

最近项目中遇到手机密码不能登录的问题,在别的地方看到了的解决方法,这里记录一下报错代码:调用SecureRandom.getInstance就会抛出异常:NoSuchProviderException: no such provider: Crypto,原来CryptoProvider在7.0以上不存在了解决代码:还要在项目中手动添加一个CryptoProvider类:public ...

2019-06-27 19:45:07 438

原创 Android Studio tools:replace的使用

一般是项目中使用的第三方依赖库中的AndroidManifest.xml中跟当前app的AndroidManifest.xml中有重复的某些属性时AS会提示这个,其实你按照他的提示添加就可以解决了,这里只是记录一下。如三方的依赖中application标签添加了android:theme, android:label可以在当前app中添加:<application and...

2019-06-27 19:29:52 4301

原创 Android Studio编译错误:Error while generating the main dex list

这个错误一般提示如下:FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:transformClassesWithMultidexlistForInstant_runDebug'.> com.android.build.api.transform.Tran...

2019-06-27 19:17:34 1816

原创 Android Studio使用Git提交、分支、切换、合并

首先到Git托管平台上创建一个空的项目,公司使用的Git托管平台是GitLab,所以先到GitLab上面创建一个项目:点击右上角的加号按钮,打开创建页面,输入项目名称、描述、选择项目的路径,点击create,会创建一个新的空项目出来, 在GitLab上面进入刚创建的项目查看,可以看到GitLab为我们列出了常用的Git命令:由于是首次创建项目是空的,所以我们本地先提交一个工程代码上去先找...

2019-06-27 00:11:31 12828 7

原创 一些提高Android开发效率的工具&方法

一些提高开发效率的工具&方法1. 使用快捷键提高操作效率下面的有些快捷键是经过我修改的,如果你不知道AS原生的快捷键是什么或者忘记了快捷键可以到Settings->Keymap下面搜索查看,使用熟练了之后就会记住了。当然你也可以在Settings->Keymap中修改自己觉得顺手的快捷键组合。快捷键作用对应菜单路径Ctrl + F当前文件查找内容...

2019-06-20 18:25:00 1603 2

转载 EventBus源码学习

在进入主题之前,我们先保持着这样几个疑问,EventBus的使用三要素里,我们为什么要去定义事件方法,并且用到了@subscribe()注解? EventBus.getDefault().register(Object)这行代码到底干了什么?发送事件的时候又做了哪些操作?为什么要在onDestory()做解除绑定的操作…等等(一) 注册: EventBus.getDefault().regist...

2019-06-11 19:39:36 78

原创 EventBus使用详解

EventBus是一个基于发布者/订阅者模式的事件总线框架。发布者/订阅者模式,也就是观察者模式(定义了对象之间的一种一对多的依赖关系,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新)。在EventBus中,当发布者发布事件时,所有订阅该事件的事件处理方法将被调用。EventBus的优点:解耦和简化Activities, Fragments等组件以及后台线程之间的通信,分...

2019-06-03 20:41:17 2401

原创 RxJava背压

RxJava背压主要用来解决异步订阅关系中,被观察者发送事件的速度与观察者接收事件的速度不匹配的问题。大多数情况下,由于被观察者发送事件速度太快,而观察者来不及响应处理所有事件,从而导致事件丢失、OOM等异常。RxJava 2.0中对背压的支持主要是通过Flowable类来实现的,Flowable其实就是被观察者(Observable)的一种新实现,用来解决RxJava 1.0中无法解决的背压...

2019-05-29 08:55:36 554 1

原创 RxJava操作符

文章目录RxJava创建型操作符create()操作符just()操作符fromArray()操作符fromIterable()操作符differ()操作符timer()操作符interval()操作符intervalRange()操作符range()操作符rangeLong()操作符其他RxJava变换操作符map()操作符flatMap()操作符concatMap()操作符buffer()操作...

2019-05-15 08:50:46 1835

转载 Android应用被后台杀死后如何重新走闪屏逻辑

Android应用运行在后台的时候,经常被系统的LowMemoryKiller杀掉,当用户再次点击icon或者从最近的任务列表启动的时候,进程会被重建,并且恢复被杀之前的现场。什么意思呢?假如APP在被杀之前的Activity堆栈是这样的,A<B<C,C位于最上层APP被后台杀死后,APP端进程被销毁了,也就不存在什么Activity了,也就没有什么Activity堆栈,...

2019-05-07 20:39:07 693

转载 解决Android Studio无法查看API 27的源码

解决方法Step1.下载源码通过 SDK Manager 可以查看和下载源码包。Android Studio 会根据 compileSdkVersion 的值去加载对应版本的源码包。所以,源码包选择下载的版本和编译版本 保持一致。imageStep2.关联源码找到 jdk.table.xml,找到源码相应版本的 < sourcePath>标签,把源码路径写进...

2019-05-06 18:35:46 575

原创 Espresso测试框架的使用

Espresso是Google官方提供的一个Android测试库,是一个AndroidJunit测试库,需要运行到设备或模拟器上进行测试。Espresso是意大利语“咖啡”的意思,它的最大的优势是可以实现UI自动化测试,设计意图是想实现喝咖啡的功夫就完成自动测试。通常我们需要手动点击测试的UI功能,利用这个库可以自动为你实现。添加依赖:dependencies { androidTes...

2019-05-06 17:29:15 3017 9

原创 Android单元测试框架Robolectric的学习使用

Robolectric普通的AndroidJunit测试需要跑到设备或模拟器上去,需要打包apk运行,而Robolectric通过实现一套能运行的Android代码的JVM,然后在unit test运行的时候去截取android相关的代码调用,然后转到自己实现的代码去执行这个调用的过程。从而达到能够脱离Android环境运行Android测试代码的目的。最新的Robolectric是4.3+...

2019-04-29 16:34:02 2958

原创 Android单元测试学习总结

Android单元测试主要分为以下两种本地单元测试(Junit Test), 本地单元测试是纯java代码的测试,只运行在本地电脑的JVM环境上,不依赖于Android框架的任何api, 因此执行速度快,效率较高,但是无法测试Android相关的代码。Android单元测试(Android Test),是针对Android相关代码的测试,需要运行在真机设备或模拟器上,运行速度较慢,但是可以...

2019-04-22 08:53:22 2601 2

原创 Okio源码学习分析

在之前的文章Okio—— 更加高效易用的IO库中参考官方的demo简单学习了一下Okio的使用方法,这篇就来简要分析学习一下Okio的源码实现。Okio源码中主要有这么几个重要的东西:Source和SinkSegmentBufferByteStringTimeout下面依次来看一下这几个东东:Source & Sink这两个是Okio中最基本的两个接口,分别对应jav...

2019-04-18 10:31:16 426

原创 Okio—— 更加高效易用的IO库

在OkHttp的源码中经常能看到Okio的身影,所以单独拿出来分析一下,作为作为OkHttp的低层IO库,Okio确实比传统的java输入输出流读写更加方便高效。

2019-04-08 20:09:02 8186 1

转载 Android android:launchMode=“singleInstance” 页面跳转黑屏

将Activity的启动模式设置为singleInstance,即android:launchMode=“singleInstance”当应用跳转到启动模式设置为singleInstance的Activity页面时,出现一段黑屏修改方式如下步骤一、在AndroidManifest.xml中设置Activity主题 android:theme="@style/Theme.TitleBar"&...

2019-04-03 15:16:08 600

原创 Android锁屏下弹窗的尝试

首先,可以确定的一点是锁屏下弹出页面必须用Activity实现,用WindowManager和Dialog均不行,然后有个注意的地方就是某些手机默认是不允许应用在锁屏下弹出界面的,比如小米的MIUI和魅族的Flyme, 需要在设置中打开一项权限才可以:并且这个权限不能像其他权限一样可以在代码中动态申请,只能用户手动选择允许。在我的手机上这个权限默认是禁止的,即便选择询问,有时也是不能弹出询问...

2019-03-25 21:27:56 1963 4

原创 华为全面屏适配踩坑记录

华为手机什么都好,就是底部有个恶心的虚拟导航栏,对开发者而言为了去掉这个导航栏真是操透了心,这里主要记录全屏状态下对虚拟导航栏的隐藏做的尝试。首先,Activity全屏设置: @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInst...

2019-03-20 12:58:13 3200

原创 OkHttp3错误异常: java.net.ProtocolException: unexpected end of stream 源码分析

之前在项目中调试部分上传附件的接口时遇到unexpected end of stream错误,在项目所使用的网络框架是我基于OkGo封装的一个网络请求库,而OkGo内部则其实是基于OkHttp封装的。网上查阅了一下发现遇到这个问题的人挺多,导致这个异常的原因可能不止一种,本文主要针对我遇到的这种情况下导致这个问题的原因分析,做个记录。首先看一下错误日志:看到这个错误的原因,起初我有点担心可能...

2019-03-18 21:06:40 14781 3

原创 Activity在锁屏时的诡异生命周期

最近突然发现Activity在锁屏时生命周期有点奇怪,在我的手机魅族7.1.1上测试基本是下面的结果:按下电源键锁屏:onPause-----onStop再按下电源键解锁:onRestart-----onStart-----onResume这个结果还是比较准确的,大多数时候都是这样的结果,但是跟其网上他人所描述的情况有所不同,大部分人会出现在锁屏时Activity进行销毁重建(onDestr...

2019-03-15 15:22:25 1089

原创 关于Fragment的onResume() 以及可见状态的判断

Fragment中有onResume()和onPause()方法,一般来说这两个方法是跟Activity绑定的,即触发Activity的这两个方法时就会触发Fragment的这两个方法,另外Fragment还有可见与不可见状态,但是Fragment中的onResume()/onPause()和可见/不可见完全是两码事。这里我将这两种情况做了一下分析,以做记录。一、onResume()和onPau...

2019-02-14 19:02:21 1474

原创 Android创建/删除桌面快捷方式

创建桌面快捷方式,老的代码就不贴了,网上一大堆,基本是intent设置各种action。从Android 7.1(API 25)开始,Android新增了ShortcutManager,可以对桌面久按应用图标弹出的快捷方式进行管理,但是API 25上仍然可以使用老的方式添加快捷方式,从API 26开始支持通过ShortcutManager添加快捷方式了。为了兼容低版本我们可以使用support提...

2019-01-31 16:52:16 1712 1

原创 IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling

最近在使用RecyclerViewAdapter的时候遇到这个问题,这里总结记录一下,先看一下报错日志:原因是我在Adapter中的item放了一个CheckBox, 并给CheckBox设置了监听,当选中状态改变的时候,在监听回调中直接调用notifyItemChanged就会出现这个问题。代码如下: @Override protected void convert(fina...

2019-01-31 16:15:10 11958 10

原创 根据资源名称动态获取资源id的两种方式

通常情况下我们使用R.xxx的方式引用资源,在某些情况下需要根据资源的name来获取资源的id,查了下资料,目前主要有两种方式,这里总结记录一下:第一种,通过反射来获取例如,根据name获取drawable资源: private int getDrawableId(String drawableName) { try { Field field ...

2019-01-31 15:10:36 1430

原创 温故而知新:重新认识Activity的生命周期

2019-01-07 17:02:48 279

原创 adb shell dumpsys 命令查看内存

用以下命令可以查看程序的内存使用情况: adb shell dumpsys meminfo $package_name or $pid此外adb shell dumpsys命令还可以用来查看系统服务信息,使用下面命令可以输出系统当前支持的服务:adb shell service list输出:Microsoft Windows [版本 6.1.7601]版权所有 (c) ...

2018-11-27 09:54:08 3648

原创 Installation error: INSTALL_FAILED_UID_CHANGED 的解决办法

出现此问题的原因大多是apk冲突造成,解决的办法如下:Settings -&amp;gt; Applications, 卸载出现问题的apk,重新安装即可。如果apk无法卸载,则将apk相关文件和相关内容删除。Step:(1) 删除可能相关的文件:/data/app(apk file), /system/app/(apk file), /data/data/(data file),(2) 除了删...

2018-11-27 09:02:50 800 1

原创 阿里巴巴Android开发手册v1.0.1(网页版)

阿里巴巴Android开发手册已经出了有段时间了,官方是pdf版的手册,本文是我根据该手册整理的网页版本,习惯网页阅读的小伙伴们可以拿去欣赏了。另外,文中会有一些个人的备注理解,算是读书笔记了,介意的可以忽略掉。【强制】 必须遵守,违反本约定或将会引起严重的后果;【推荐】 尽量遵守,长期遵守有助于系统稳定性和合作效率的提升;【参考】 充分理解,技术意识的引导,是个人学习、团队沟通、项目合...

2018-11-14 08:48:51 348

原创 Android知识点归纳总结提纲

一、Android四大组件Activity相关, Activity生命周期理解、 Activity四种启动模式,Activity的显示/隐式启动,Activity之间的跳转与回调,Activity之间的intent数据传递,理解Activity工作原理Activity与Window之间的关系,Activity和dectorView等Service相关, Service生命周期方法,Servi...

2018-11-05 10:24:03 4761

原创 为什么不能在BroadcastReceiver中开启子线程

如果开发者需要在Service处理耗时任务,建议在Service中另外启动一条新线程来处理该耗时任务.就像前面BindService中看到的,程序在BindService中的onCreate()方法中启动了一条新线程来处理耗时任务.可能有读者感到疑惑:直接在其他程序组件中启动子线程来处理耗时任务不行吗?这种方式也不可靠,由于activity可能会被用户退出,Broadcast Receiver...

2018-11-05 09:16:30 1536

转载 Android Studio替换AAR后源码不刷新问题解决

替换aar文件后,工程中的aar代码没有改变。试了网上各种重新编译、刷新重启、同步gradle等方法,通通不好使。我的环境: android studio版本是3.1.4,win7。有两种方法:1.在工程根目录进入.ideal\libraries目录,如果引入的aar文件名为mqtt.jar,那么在.ideal\libraries目录下会有一个文件“Gradle__mqtt__a...

2018-09-07 15:51:21 3257

Android做的视频播放器MediaPlayer

基于Android的视频播放器,之前传的有错误,又修改了一下,界面不好,但功能都实现了,具有开始、暂停、重播、上一个、下一个等功能,但进度条和时间显示,可以调音量大小以及设置静音,具有从SD卡中选择视频文件的功能,也可以自动搜索SD卡中的视频文,可以添加视频到播放列表等等,当然也参考了一些其他的代码与资料,希望对学习Android的同志们有些帮助,我用的是Andorid2.2版本测试的

2012-08-12

MediaPlayer

自己实现的基于Android的视频播放器,具有开始、暂停、重播、上一个、下一个等功能,但进度条和时间显示,可以调音量大小以及设置静音,具有从SD卡中选择视频文件的功能,也可以自动搜索SD卡中的视频文,可以添加视频到播放列表等等,当然也参考了一些其他的代码与资料,希望对学习Android的同志们有些帮助

2012-07-31

电脑知识精华

电脑知识精华,全面的介绍了电脑故障及维护知识

2012-03-21

数据库原理实验报告资料

数据库上机实验,如何建立索引,如何检索等

2011-07-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

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