![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 77
Android
windfallsheng
这个作者很懒,什么都没留下…
展开
-
Android网络状态变化监听 -- 结合registerNetworkCallback和广播
文章目录**图****说明**1、Build.VERSION.SDK_INT >= Build.VERSION_CODES.N,使用connectivityManager.registerDefaultNetworkCallback()方法;2、Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP,使用connectivityManager.registerNetworkCallback(networkRequest, new MyNetwo原创 2021-11-15 17:42:18 · 4374 阅读 · 0 评论 -
自定义数字键盘输入金额的控制方式
先上图## 说明在有自定义的输入键盘对 EditText 控件进行赋值的情况下,以友好的方式处理金额的输入;1、纯数字中间输入小数点时,会自动保留两位小数,移除多余位数;2、纯数字前面直接输入0时,会自动补齐后面的小数点,同时保留两位小数;3、0和小数点之间不允许再输入任何数字;4、最多只能输入一个小数点;5、纯数字前面直接输入小数点时,会自动补齐前面的0,同时保留两位小数;6、当删除数字时,如果删除了小数点会进行数字最大值的限制判断;7、当删除数字时,如果前面有多余的0位,则会移除多原创 2021-11-11 13:16:16 · 946 阅读 · 0 评论 -
Android实现动态切换环境配置4.0版本
前言 在上一篇幅《Android实现动态切换环境配置3.0版本》基础上进行了以下调整:1、静态各环境的列表实现,每个环境下包含的各服务器地址信息是放在一个list集合中,可通过配置JSON串进行调整。2、手动输入URL的页面实现,以列表方式实现,并且每一项都可以进行信息的重新编辑,也可通过配置JSON串进行数据调整。 其它部分的功能保持不变。先上图 具体实现部分并不复杂,不再进行详细表述。apk 开发版安装包地址:apk 生产版安装包地址:项目工程地址:...原创 2021-11-05 18:28:54 · 1936 阅读 · 0 评论 -
Android实现动态切换环境配置3.0版本
文章目录前言先上图启动初始化环境配置环境配置入口环境配置初始化静态URL配置手输URL配置开关配置快捷测试入口总结前言在上一篇幅《Android实现动态切换环境配置2.0版本》我们实现了可以动态切换环境配置的功能,但是一些不同类型的配置参数没有进行区别对待,造成实现逻辑比较耦合,当前3.0版本从页面结构和代码实现上进行了拆分,方便后续不同的参数配置业务功能的修改和扩展。先上图apk 安装包地址:https://download.csdn.net/download/Silence1515/21059原创 2021-11-03 16:20:39 · 1891 阅读 · 0 评论 -
Android实现动态切换环境配置2.0版本
文章目录前言先上图历史记录功能总结前言在上一篇幅《Android在APP开发阶段,实现动态的环境配置切换》 我们实现了可以动态切换环境配置的功能,现在扩展了它的功能,添加了手动输入的URL地址,保存到历史记录列表中,可以从列表选择使用,这样可以在手动输入地址的时候更方便、快捷一些。先上图apk 安装包地址:项目工程地址:历史记录功能 在手动输入URL地址的部分添加了历史记录功能,可以配置常用的地址,如果有手动输入的地址且保存使用,则会缓存在本地,下次中以查看到。历史记录数据,每次会将最近输入原创 2021-08-13 14:54:20 · 528 阅读 · 0 评论 -
Android在APP开发阶段,实现动态的环境配置切换
少啰嗦,先上图APP动态的环境配置切换一般情况下APP在项目开发中,会配置不同的环境,比如,测试环境、准生产环境、生产环境等。不同的环境对应不同的服务器URL地址,或者其它的一些功能开关的配置,一般我们打出一个安装包同时也只对应的一种环境下的配置,这样在需要切换其它环境时得重新打包安装使用,这样很不方便,也浪费时间。而我们一般都会选择动态的配置这样环境,在应用运行期间可以随意切换到其它环境进行测试等。我们实现的动态环境配置,是相对比较通用的处理逻辑,可以通过配置的 json 文件的调整来满足项目需求原创 2021-08-10 21:55:06 · 902 阅读 · 0 评论 -
Android 组件化实战
文章目录Android 组件化实战为什么要掌握组件化什么是组件化为什么要组件化组件化的优缺点组件化要点:1. 各个 module 能实现动态改变工程类型2. 单独编译状态下的相关配置3. 不同编译状态下的生命周期管理4. 组件间的跳转5. 组件间的通信示例程序说明组件化配置组件动态构建方式的开关配置app 壳 ModuleAndroidManifest.xml 文件app的 build.gradle 文件业务组件的 Module业务组件内的 gradle文件 配置业务组件内的清单文件配置命名规范组件化生命周原创 2021-08-03 12:32:33 · 675 阅读 · 1 评论 -
Android 使用 Application.ActivityLifecycleCallbacks 来判断应用前后台状态的监听
Android 使用 Application.ActivityLifecycleCallbacks 来处理应用前后台切换状态的监听:package com.windfallsheng.base;import android.app.Activity;import android.app.Application;import android.os.Bundle;import androidx.annotation.NonNull;import androidx.annotation.Null原创 2021-04-07 15:57:00 · 949 阅读 · 1 评论 -
RecyclerView精简版本的通用BaseAdapter封装
声明:本项目中封装实现的BaseAdapter基于开源项目 BaseRecyclerViewAdapterHelper BaseRecyclerViewAdapterHelper 对RecyclerView的adapter进行了非常完善的封装,可能说实现了万能适配器,也扩展了比较丰富的功能,但是在不少数情况下,我们对RecyclerView列表的使用也相对不是很复杂,实现的样式效果也不是很多,只是单一样式的列表,或者使用多样式的列表就可以满足功能需求,这种情况下我们其实只需要对adapte...原创 2021-01-15 21:26:43 · 1228 阅读 · 1 评论 -
taskInfo.baseActivity是什么?
看到了无数人判断某个activity是否存在栈堆中是类似这样写的:private boolean isExist(Class<?> activity) { Intent intent = new Intent(this, activity); ComponentName cmpName = intent.resolveActivity(getPackageManager()); boolean flag = false; //原创 2020-07-23 10:22:19 · 547 阅读 · 0 评论 -
父布局为RelativeLayout,且固定高度,设置gravity="center_vertical"无效的问题
首先看下布局情况,一个RelativeLayout的父布局里有三个直接子元素,两个RelativeLayout布局和一个TextView控件; <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" an...原创 2020-03-29 23:48:52 · 2119 阅读 · 1 评论 -
com.android.build.api.transform.TransformException: java.util.zip.ZipException: zip file is empty异常
报错信息:Cause: zip file is emptyorg.gradle.execution.MultipleBuildFailures: Build completed with 1 failures. at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLaunche...原创 2020-03-26 16:34:37 · 1103 阅读 · 0 评论 -
GreenDao数据库结合sqlcipher时的运行时异常:java.lang.UnsatisfiedLinkError …couldn't find "libsqlcipher.so"
GreenDao数据库结合sqlcipher时的运行时异常大致的异常信息如下: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.m.c-2/base.apk"],nativeLibraryDirectories=[/data/app/c...原创 2020-03-26 16:34:04 · 1343 阅读 · 0 评论 -
项目的网络请求开发中retrofit2和okhttp3的结合使用示例
本文是retrofit2和okhttp3的结合使用的简单示例,逻辑不复杂,下文将列出所有代码:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.windfallsheng....原创 2020-03-15 14:09:46 · 705 阅读 · 0 评论 -
策略模式的应用案例,以即时通信中,对不同类型的消息的构建处理业务为例,结合简单的缓存业务
对于策略模式的概念及优级缺点这里暂不赘述,本文主要以应用实战的角度去讲解。少啰嗦,先上图:在目前的即时通信中,消息的类型多种多样,对于不同的消息类型我们可能需要在不同的代码逻辑分支(if else判断)上去处理,并且随着消息类型的增加随,业务逻辑的扩展,会造成代码的臃肿,难以阅读,难以维护,这个时候我们可以想到的一种应用模式就是“策略模式”。下面进入具体的应用代码示例:pac...原创 2020-03-11 18:50:28 · 406 阅读 · 0 评论 -
组件化的简单实现,各module可独立编译
首先可以先学习通过gradle的配置,去实现各个Module的可独编译,具体项目中各个Module的业务拆分和依赖问题,及基础库和公众业务层的处理,还需要更多的业务实践;可以在项目的gradle.properties进行开关配置,也可以在build.gradle文件中处理;# Project-wide Gradle settings.# IDE (e.g. Android Studio...原创 2020-03-03 21:08:38 · 1079 阅读 · 0 评论 -
The specified child already has a parent. You must call removeView() on the child's parent first.
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view....原创 2018-04-09 10:55:22 · 436 阅读 · 0 评论 -
EventBus之优先级和事件取消
优先级和事件取消(Priorities and Event Cancellation)虽然EventBus的大多数用例不需要优先级或事件取消,但在某些特殊情况下,它们可能会派上用场。例如,如果应用程序在前台,事件可能会触发一些UI逻辑,但如果应用程序当前对用户不可见,则会做出不同的反应。订阅者优先级:您可以通过在注册期间为订阅者提供优先级(provide a priority)来更改事...原创 2019-08-03 21:23:34 · 972 阅读 · 0 评论 -
EventBus之Subscriber Index
Subscriber Index订阅者索引是EventBus 3的一个新特性。这是一个可选的优化,以加快初始订阅者注册。Subscriber Index在编译时(build time)使用EventBus注解处理器(annotation processor)创建。虽然不是必须要使用索引,但建议在Android上使用索引以获得最佳性能。Index Preconditions注意,只能...原创 2019-08-03 22:28:51 · 672 阅读 · 0 评论 -
EventBus之AsyncExecutor
AsyncExecutorAsyncExecutor类似于线程池,但具有失败(异常)处理。失败是抛出异常,AsyncExecutor将把这些异常封装在一个事件中,该事件将自动发布。免责声明:AsyncExecutor是一个非核心实用程序类。它可能会在后台线程中为您节省一些错误处理代码,但它不是一个核心EventBus类。通常,您调用 AsyncExecutor.create() 来创建...原创 2019-08-03 22:44:29 · 986 阅读 · 0 评论 -
EventBus之交付线程(Delivery Threads)
Delivery Threads (ThreadMode)EventBus可以为您处理线程:事件(events)可以在不同于发布线程(the posting thread)的线程中发布(be posted)。一个常见的用例是处理UI更改。在Android中,UI更改必须在UI(主)线程中完成。另一方面,网络或任何耗时的任务都不能在主线程上运行。EventBus帮助您处理这些任务并与UI线程同步...原创 2019-07-27 21:52:11 · 703 阅读 · 0 评论 -
EventBus之EventBusBuilder
ConfigurationEventBusBuilder类配置EventBus的各个方面。例如,下面是如何构建一个EventBus,在发布的事件没有订阅者时保持安静:EventBus eventBus = EventBus.builder() .logNoSubscriberMessages(false) .sendNoSubscriberEvent(false) ...原创 2019-07-28 21:11:26 · 742 阅读 · 0 评论 -
EventBus之粘性事件(Sticky Events)
Sticky Events有些事件在事件发布后携带有感兴趣的信息。例如,一个事件表示某个初始化已经完成。或者如果你有一些传感器或位置数据,你想要保持最近的值。您可以使用粘性事件,而不是实现自己的缓存。因此EventBus将某个类型的最后一个粘性事件保存在内存中。然后可以将粘性事件交付给订阅者或显式查询。因此,您不需要任何特殊的逻辑来考虑已经可用的数据。示例:可以在订阅都订阅之前,首先发...原创 2019-08-03 20:53:39 · 4729 阅读 · 0 评论 -
Android事件总线框架Otto源码解析三(unregister过程)
说明:本文的解析过程并不只是简单的讲解框架中各个方法的调用逻辑、程序的执行过程,而是依赖于示例代码,结合了具体的的示例程序的执行流程,有助于更好的理解。有关Otto的使用方法参见另一篇文章: Android事件总线框架Otto使用介绍package com.windfallsheng.myotto;import android.content.Context;import and...原创 2019-07-06 21:28:30 · 261 阅读 · 0 评论 -
Android应用开发中关于SQLite数据库升级、降级及数据迁移的代码示例
SQLite数据库升级、降级及数据迁移的代码示例:import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import com.windfal...原创 2018-12-20 10:35:08 · 527 阅读 · 0 评论 -
移动应用APP数据统计SDK部分功能实现
Monicat - SDK简单说明:生成JAR包或者AAR文件,可直接加入项目中使用代码示例:import android.app.Application;import com.windfallsheng.monicat.action.MonicatManager;import com.windfallsheng.monicat.base.Configuration;imp...原创 2018-12-06 11:02:49 · 898 阅读 · 2 评论 -
Dagger错误——cannot be provided without an @Provides- or @Produces-annotated method
com.hi.app.presenter.contract.AccountContract.IAccountPresenter cannot be provided without an @Provides- or @Produces-annotated method.产生这个错误的原因之一:@Component(modules = LoginContractModule.class)...原创 2018-10-24 16:34:06 · 2351 阅读 · 0 评论 -
Json串中带有转义字符时候的解析方式示例
比如从后台返回这样一段json串,中间有个字段 reminderContent 这个String类型后面其实也是一个json串,后台封装数据之后就自动转义了其中的双引号,这个时候用Gson转换的时候会报错的,因为你的实体类中 reminderContent 这个字段是String类型,但是后台的这个数据中却包含有转义符号,因此无法解析成功。{ "userInfo": { "he...原创 2018-04-13 11:43:25 · 14937 阅读 · 1 评论 -
使用DataBinding框架遇到的错误——找不到符号类 BR 程序包 com.android.databinding.library.baseAdapters app:compileDebugJav
Information:Gradle tasks [:app:assembleDebug]E:\Working_Files\projects\DataBindingDemo\app\src\main\java\com\****\databindingdemo\activity\ListActivity.javaError:(8, 52) 错误: 找不到符号符号: 类 BR位置: 程序包 com...原创 2018-04-03 15:18:08 · 11841 阅读 · 2 评论 -
基于RecyclerView实现的仿微信聊天界面,item长按根据触摸位置弹出对话框
首先看一下实现的效果图: 在上一篇文章 基于RecyclerView实现的实现多样化的item样式——类似IM即时通讯聊天界面的布局效果 的基础上实现的仿微信聊天界面,item长按,根据手的触摸位置弹出选项对话框,并完善小动画效果列表界面的实现样过程可参见上一篇文章,这里先看一下MainActivity类:主要的实现...原创 2018-03-12 17:55:35 · 3589 阅读 · 0 评论 -
基于RecyclerView实现的实现多样化的item样式——类似IM即时通讯聊天界面的布局效果
首先看一下实现的效果图:RecyclerView实现多样化的item样式一般的实现代码还是比较简单的,直接上代码:ChatDetailAdapter适配器:package com.alter.popupwindowmenu.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;...原创 2018-03-12 15:07:47 · 1132 阅读 · 0 评论 -
自定义Dialog对话框(实现微信分享对话框)
首先看一下实现的效果图:实现思路,首先要对Dialog进行自定义,使用我们自己的布局,其次我们发现Dialog中展示的数据类型、展示的样式也是略有不同的,这就需要我们在数据格式方法进行一些设置,以实现在同一个Dialog去展示不同的效果。 public class CommonShareToDialog extends Dialog { public CommonSha...原创 2018-02-08 16:48:12 · 1693 阅读 · 0 评论 -
Android第三方库隔离之对第三方图片加载库的隔离
在开发项目中引入第三方库总是不可避免的事,但是如果在代码中直接调用第三方库的方法,对于项目的灵活性也是不够的。如果遇到我们必须要更换其它框架的时候,那么整个项目中所有具体用到该框架的地方都需要更换,所有具体的调用方法都要一一更改,稍有疏忽还会引起不必要的bug,这个时候如果能将第三方库隔离开来,在具体代码中不直接执行第三方库的方法,而是交给一个可以统一调度第三方库的管理层就好了,这其实就是一种再封原创 2017-07-18 14:34:10 · 994 阅读 · 0 评论 -
利用断点续传原理下载文件的过程当中由于Range参数错误导致的下载问题
项目中实现的过程是,要下载的文件大小的最大值是从后台获取,如果手机端下载一部分后暂停,再重新下载,会传递断点续传下载时需要的最大值参数和已下载的文件大小的参数,但是有部分比较大的文件,Gson解析后台的文件大小字段为double类型后是用科学计数表示,比如2.305E8,而不是230500000,所以断点续传下载时请求的返回码是200,而不是206。 ...原创 2018-12-21 18:13:53 · 752 阅读 · 0 评论 -
Android使用Notification通知栏功能的封装
在Android应用开发中我们经常会使用到通知栏的功能,安卓的通知栏有多种类型样式,包括基本类型、带进度条的类型、大图标类型、大段文本类型等,在Android 8.0 (API level 26) 中使用通知栏的代码示例:// Create an explicit intent for an Activity in your appIntent intent = new Intent(th...原创 2019-07-06 20:19:43 · 1148 阅读 · 0 评论 -
Android事件总线框架Otto源码解析二(post事件过程)
说明:本文的解析过程并不只是简单的讲解框架中各个方法的调用逻辑、程序的执行过程,而是依赖于示例代码,结合了具体的的示例程序的执行流程,有助于更好的理解。有关Otto的使用方法参见另一篇文章: Android事件总线框架Otto使用介绍public class PostActivity extends AppCompatActivity { private static fin...原创 2019-06-30 21:13:37 · 329 阅读 · 0 评论 -
EventBus的特性及简单的使用介绍
EventBus是一个用于Android和Java的开源库,使用发布者/订阅者模式(publisher/subscriber pattern)实现松散(loose)耦合(coupling)。EventBus使中央通信仅用几行代码就能解耦类(decouple classes)——简化代码(simplifying the code)、消除依赖(removing dependencies)和加速应用程序...原创 2019-07-21 15:30:00 · 640 阅读 · 0 评论 -
Android事件总线框架Otto源码解析一(Bus的构造过程及在使用注解@Subscribe时的注册过程)
说明:本文的解析过程并不只是简单的讲解框架中各个方法的调用逻辑、程序的执行过程,而是依赖于示例代码,结合了具体的的示例程序的执行流程,有助于更好的理解。有关Otto的使用方法参见另一篇文章: Android事件总线框架Otto使用介绍package com.example.myotto;import android.content.Context;import android.c...原创 2019-06-28 15:01:25 · 3303 阅读 · 0 评论 -
Android事件总线框架Otto使用介绍
Otto框架是square公司为Android出的一款事件总线框架,设计用于解耦应用程序的不同部分,同时仍然允许它们有效地通信。https://github.com/square/otto以下简单介绍一下Otto框架的使用方式:创建Bus实例:Bus bus = new Bus();Otto在设计时考虑到了android特定的用例,建议使用单例模式使用(尽管这不是必需的),...原创 2019-07-02 21:47:32 · 746 阅读 · 0 评论 -
Android事件总线框架Otto源码解析四(使用Produce注解的过程)
说明:本文的解析过程并不只是简单的讲解框架中各个方法的调用逻辑、程序的执行过程,而是依赖于示例代码,结合了具体的的示例程序的执行流程,有助于更好的理解。有关Otto的使用方法参见另一篇文章: Android事件总线框架Otto使用介绍package com.windfallsheng.myotto;import android.content.Context;impo...原创 2019-07-07 21:48:23 · 387 阅读 · 0 评论