Android
文章平均质量分 71
Android知识积累
Chen_ShengJie
一个100行的代码调试都可能会让程序员遇到很多挫折,所以,面对挫折,我们永远不能低头。
展开
-
Getx系列之Dialog
针对Dialog的封装,如果封装的widget需要传入context,那就不算好的封装成品。在原生开发中,就很厌烦传入context,有些未封装完美的工具类t,比如oast、dialog等需要传入context。而针对flutter应用开发,Getx就封装了一个不需要传入context对象且可自定义的dialog。原创 2022-09-04 12:35:58 · 5116 阅读 · 1 评论 -
startActivityForResult废弃了,用Activity Result API吧
在MainActivity里通过点击一个按钮,往Bundle里添加数据,然后放到intent里,通过startActivityForResult向SecondActivity传递数据,并且重写了onActivityResult()方法去解析SecondActivity返回来的数据。SecondActivity就稍微简单点了,先获取到MainActivity传递过来的数据,然后再点击一个按钮,发送新的数据返回给MainActivity。废弃了,自然有替代品。所以才发现过时的,如果版本低了,我还蒙在鼓里。原创 2022-09-02 22:37:22 · 5495 阅读 · 1 评论 -
LiveData的postValue丢值?setValue也丢值?
postValue方法内部其实是将值得回调逻辑放到了Runnable中,再post给Handler,利用Handler在主线程中更新,因此从postValue到执行Runnable,中间是存在时间差的,同时也说明 postValue是可以在子线程中发送数据的,在执行Runnable之前,因为是连续调用的postValue,只有在页面活跃状态下才可以分发值,当可以点击按钮时候,当前Activity 的生命周期已经走过了 OnStart、onResume,第四个是因为 LiveData 的观察生命周期的特性,.原创 2022-08-16 22:34:02 · 2297 阅读 · 2 评论 -
Kotlin系列之let、with、run、apply、also函数的使用
文章转载来自于阿里大佬之文章很好,恐大佬怒删,特此转载备份,客官可直接移步去大佬的文章细看。简述:相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。......转载 2022-08-07 10:28:11 · 626 阅读 · 0 评论 -
Okhttp 双任务队列机制
为了完成调度和复用,定义了两个队列分别用做等待队列(readyAsyncCalls)和执行任务(runningAsyncCalls)的队列。这两个队列都是Dispatcher成员变量。Dispatcher是一个控制执行,控制全部Call的分发和任务的调度、通讯、清理等操作。/** Ready async calls in the order they'll be run. */private final Deque<AsyncCall> readyAsyncCalls = new ...原创 2022-01-19 17:14:06 · 2461 阅读 · 0 评论 -
MMKV——基于 mmap 的高性能通用 key-value 组件
MMKV 原理 内存准备 通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。 数据组织 数据序列化方面我们选用 protobuf 协议,pb 在性能和空间占用上都有不错的表现。 写入优化 考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力。我们考虑将增量 kv 对象序列化后,append 到内存末尾。 空间增长 使用 append 实现增量更新带来原创 2020-09-22 15:46:26 · 467 阅读 · 0 评论 -
post和get区别
HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。GET和POST能做的事情是一样一样的。...转载 2020-09-22 11:24:20 · 22850 阅读 · 13 评论 -
Android线程池ThreadPool浅析
1.传统开启线程方式:new Thread(new Runnable() { @Overridepublic void run() {。。。。。。}}).start();new Thread的弊端如下:a. 每次new Thread新建对象性能差。b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,线程过多,导致各个线程竞争抢夺CPU执行权,线程的频繁切换导致效率的降低,及可能占用过多系统资源导致死机或oom。c. 缺乏更多功能,如定时执行、定期执行、线程中断。2.使转载 2020-08-01 13:36:00 · 520 阅读 · 0 评论 -
Bitmap的高效加载策略
一、为什么Bitmap需要高效加载?现在的高清大图,动辄就要好几M,而Android对单个应用所施加的内存限制,只有小几十M,如16M,这导致加载Bitmap的时候很容易出现内存溢出。如下图所示,便是在开发中经常遇到的异常信息:java.lang.OutofMemoryError:bitmap size exceeds VM budget为了解决这个问题,就出现了Bitmap的高效加载策略。其实核心思想很简单。假设通过ImageView来显示图片,很多时候ImageView并没有原始图片的尺原创 2020-07-31 10:34:56 · 303 阅读 · 0 评论 -
Android apk反编译java代码
工具下载链接:https://download.csdn.net/download/csj731742019/12655396第一步:首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录下。第二步:在命令行下定位到d2j-dex2jar.bat所在目录,运行d2j-dex2jar.bat classes.dex生成classes_dex2jar.j...原创 2020-07-23 17:12:02 · 417 阅读 · 0 评论 -
CrashHandler全局异常捕获
应用在日常的开发中,我们经常需要去Logcat测试我们的App,但由于很多原因,Android Monitor会闪屏或者Crash信息丢失。 这个时候就需要一个CrashHandler来将Crash写入到本地方便我们随时随地查看安卓已经帮我们想好了解决问题的接口(UncaughtExceptionHandler)。从名称上就知道这是用来处理没有捕捉到的野生Exception的。平时我们try catch的Exception的那就叫捕捉到的。看一下UncaughtExceptionHandler的源码:原创 2020-07-23 16:14:04 · 2455 阅读 · 0 评论 -
Android 快速定位ANR问题
定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作“应用程序无响应”(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。默认情况下,在Android中Activity的最长执行时间是5秒(主要类型),BroadcastReceiver的最长执行时间的则是10秒,ServiceTimeout的最长执原创 2020-07-23 10:39:46 · 811 阅读 · 0 评论 -
HashMap为啥初始化大小是16
HashMap的默认初始化长度是多少?static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16在JDK1.8的 235 行有1<<4就是16,为啥用位运算呢?直接写16不好么?这里主要是位运算的性能好,为啥位运算性能就好,那是因为位运算人家直接操作内存,不需要进行进制转换,要知道计算机可是以二进制的形式做数据存储啊,这里使用了位运算,为啥不直接16嘞?这里主要是位运算的性能好,为啥位运算性能就好,那是因转载 2020-07-21 14:59:40 · 7932 阅读 · 7 评论 -
浅析哈希表
哈希表定义:散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。(摘自百度百科)散列函数:是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常用Hash函数有:1.直接寻址原创 2020-07-21 10:04:20 · 476 阅读 · 0 评论 -
AsyncTask的简单使用
功能:实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作。在使用AsyncTask时,我们无需关注Thread和Handler,AsyncTask内部会对其进行管理,这样我们就只需要关注于我们的业务逻辑即可。属于抽象类,即使用时需 实现子类public abstract class AsyncTask<Params, Progress, Result> {}参数介绍Params:开始异步任务执行时.原创 2020-07-19 21:13:13 · 1020 阅读 · 0 评论 -
Android数据传递方法汇总
1、利用Intent对象携带简单数据1.1 发送数据 //传递些简单的参数 Intent intentSimple = new Intent(); intentSimple.setClass(MainActivity.this, Main2Activity.class); Bundle bundleSimple = new Bundle(); bundleSimple.putString("name", "jay"); bundleSimple.putString("age",原创 2020-06-07 15:30:00 · 2978 阅读 · 0 评论 -
Android HTTPS SSL双向验证
package com.sunyard.moudledemo;import android.content.Context;import android.util.Log;import java.io.BufferedInputStream;import java.io.InputStream;import java.security.InvalidKeyException;import java.security.KeyStore;import java.security.NoSuch.转载 2020-05-26 15:14:12 · 560 阅读 · 0 评论 -
Android View事件分发机制
一文读懂Android View事件分发机制 简单例子了解View的事件分发 View和ViewGroup的区别原创 2020-05-25 22:23:49 · 236 阅读 · 0 评论 -
LeakCanary检测内存泄漏及解决办法
内存泄漏定义内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你Out of memory。内存泄漏的根本原因是长生命周期的对象持有短生命周期对象的引用,尽管短生命周期的对象已经不再需要,但由于长生命周期对象持有它的引用而导致不能被回收。内存泄漏造成的影响它是造成应用程序OOM的主要原因之一。由于android系统为每个应用程序分配的内存转载 2020-05-19 14:43:01 · 1843 阅读 · 0 评论 -
Android studio修改打包后的apk的名字
修改打包出来的apk名称方法也很简单,在app目录下的build.gradle (不是根目录下的build.gradle)中android{}加上如下代码。通常为了区分每次本地打的apk版本的区别,我们会自定义自动修改打包出来后的apk名称,而不是app_debug.apk或者apk_release.apk.但是为了区分每次打的apk名称不一样,我们都会加上打包的当前时间或者版本信息啥的。例如:在build.gradle 获取当前系统时间添加到打包信息中。原创 2020-04-07 09:47:52 · 4235 阅读 · 0 评论 -
android 系统架构图
下图是Android操作系统的架构,架构包括 4 层,由上到下依次是应用程序层、应用程序框架层、核心类库和Linux内核。其中,核心类库中包含系统库及 Android 运行环境。Android系统框架图应用程序层Android 装配了一个核心应用程序集合,包括 E-mail 客户端、SMS 短消息程序、日历、地图、浏览器、联系人管理程序和其他程序,所有应用程序都是用Java...原创 2020-03-12 10:53:18 · 4083 阅读 · 0 评论 -
Android Studio 项目目录结构简析
首先创建一个新的MyAppliction项目(使用版本为Android Studio 3.3 Canary 3)默认的结构为Android模式的项目结构,是经过转换过的,结构简洁明了,适合快速开发 点击左上角的Android切换成Project模式 ...原创 2020-03-09 15:58:54 · 1882 阅读 · 0 评论 -
Android Studio push到远程分支的代码回退操作
1:查看提交历史VCS->Git-> Show History 会在屏幕左下角出现历史提交的版本选中你需要回退记录 右键 选择Copy Revision Number,如下图所示:2.在Android Stuido 左下角的 Terminal 控制台中 输入 1.git reset --hard <复制出来的版本号> ......原创 2019-12-13 15:37:39 · 2785 阅读 · 0 评论 -
圆角边框,渐变背景的Textview
在默认情况下,TextView是不带边框的,如果想为Textview添加边框,只能通过为它设置一个背景Drawable,改Drawble只是一个边框,这样就实现了带边框的TextView第一步:创建shape XML文件 border.xml<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http...原创 2017-01-10 15:37:30 · 1530 阅读 · 0 评论 -
AS3.4.2版本以上将项目打包成jar的方法
本文介绍的是新的一个项目生成jar的方法,另外一种在原项目上生成module变成library的 本文木有介绍。一、新建要变成jar包的项目1、jar的功能简单的显示弹出时间选择对话框的功能二、修改配置信息先将你项目gradle文件最上面的apply plugin: 'com.android.application'改为:apply plugin: 'com.andr...原创 2019-10-27 14:01:58 · 544 阅读 · 0 评论 -
全程不用usb数据线,adb通过网络连接Android设备
我们在Android设备中通过U盘等方法安装一个超级终端, 下载网址http://os-android.liqucn.com/rj/84712.shtml 或者我上传的https://download.csdn.net/download/limin13215/10677131(这个资源分不知道为啥不能设为0)。首先保证Android设备和PC端在同一个局域网时,再进行以下操作。Androi...转载 2019-10-16 17:04:55 · 556 阅读 · 0 评论 -
Android实现点击两次返回键退出
第一种方法:// 定义一个变量,来标识是否退出private static boolean isExit = false;Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); ...原创 2016-12-20 15:11:14 · 241 阅读 · 0 评论 -
Picasso网络图片加载框架的使用
第三种:按统一比例缩放图片(保存图片的尺寸比例)便于图片的二维(宽度和高度)等于或者大于相应的视图的维度,这种方法和Glide加载图片占用的内存几乎是相同的,虽然内存开销差距不大,但是在这个问题上Glide完胜Picasso。这个属性应该不陌生吧!在项目中,为了带宽、内存使用和下载速度等考虑,服务端给我们的图片的size 应该和我们View 实际的size一样的,但是实际情况并非如此,服务端可能给我们一些奇怪的尺寸的图片,我们可以使用resize(int w,int hei) 来重新设置尺寸。...原创 2016-12-20 11:34:55 · 1418 阅读 · 0 评论 -
Android 定时器使用
在Android开发中,定时器一般有以下3种实现方法:一、采用Handler与线程的sleep(long)方法二、采用Handler的postDelayed(Runnable, long)方法三、采用Handler与timer及TimerTask结合的方法下面逐一介绍:一、采用Handle与线程的sleep(long)方法Handler主要用来处理接受到的消息。这只是最主要...原创 2016-12-20 10:59:03 · 486 阅读 · 0 评论 -
读取raw文件下的txt文件
第一步:在raw文件夹下放入 gameplay.txt文件(如果没有raw文件 要新建一个 注意必须要小写)如下图所示第二步:设置文本显示的TextviewTextViewtv;tv= (TextView) findViewById(R.id.tv);第三步:读取文件的位置private void readFromRaw() {try {In...原创 2016-12-20 17:42:43 · 1594 阅读 · 0 评论 -
安卓视频播放器 一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定
一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定,真正实现Android的全屏功能github地址:https://github.com/qiushi123/VideoDemoQcl一,主要特点1,全屏时启动新Activity实现播放器真正的全屏功能转载 2016-12-20 18:29:10 · 845 阅读 · 0 评论 -
Android studio设置字体格式之Typeface(字型)
第一步:Android Studio 添加Assets目录:添加后如下图所示:接着在assets文件下建立fonts文件夹并添加文字文件如下所示:总之首先准备好我们的TTF文件,然后丢到assets/font/目录下 然后创建对应对象,关键代码如下:Typeface typeFace =Typeface.createFromAsset...原创 2017-01-09 18:18:34 · 4798 阅读 · 0 评论 -
Android 中更新 UI 的几种方式
Android有4种更新UI的方式分别是:runOnUiThreadhandler 的 posthandler 的 sendMessageView 自身的 post本文只介绍 handler的sengMessage和runOnUiThread这两种方式Handler 是 Android 给我们提供来更新 UI 的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它来原创 2017-01-06 15:07:10 · 316 阅读 · 0 评论 -
随时随地退出程序
其实解决思路也很简单,只需要用一个专门的集合类对所有的活动进行管理就可以了,保存所有的活动在一个集合中,下面我们就来实现一下。public class ActivityCollector { public static List<Activity> activities = new ArrayList<Activity>(); public sta...原创 2016-12-20 15:43:16 · 226 阅读 · 0 评论 -
git命令下载远程分支代码
1. 在工作空间,右键,打开Git Bash我是在D:\workspace这个目录下执行的(其中workapsce是我自己创建的一个文件夹)2. clone主分支的代码(即下载主分支代码的过程) git clone 仓库url 如下图所示,已经把远程主分支代码拉到本地了 然后在你目录文件下会生成你主分支代码 然后再执行第一步操作 右键 选择Gi...原创 2018-09-19 17:16:46 · 27799 阅读 · 0 评论 -
使用Git删除本地和远程分支
远程仓库有2个分支 如下图所示 我们要做的是删除dev这个分支;步骤如下:1、找到到要操作的项目文件夹目录下右键 2、如下图所示 进入到制定文件夹中 3、查看项目的分支们(包括本地和远程) git branch -a如下图所示: 4、删除本地分支 git branch -d dev //dev为你自己创建分支的名字5、删...原创 2018-09-19 16:48:40 · 264 阅读 · 0 评论 -
Git 第一次提交代码到远程分支
1、创建远程仓库名称创建远程仓库名称2、复制远程仓库链接这个链接到最后把本地库与远程库关联的时候要使用复制远程仓库链接3、到你要上传远程仓库的项目文件中点击右键 选择Git Bash Here右键上传项目右键选择Git Bash Here如下图所示的情况4、初始化仓库 提交代码到缓存区git init // 初始化版本库 gi......原创 2018-09-19 15:57:02 · 11271 阅读 · 2 评论 -
Activity传递Bitmap对象
发送方:Bitmap bmp= BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);Bundle b = new Bundle();b.putParcelable("bitmap", bmp);Intent intent = new Intent(MainActivity.this,Main2Activ原创 2017-03-04 15:30:38 · 306 阅读 · 0 评论 -
android studio 工程相关解析(各种文件,资源访问)
1.工程项目结构解析:我们开发大部分时间都花在下面这个部分上:接下来我们对关键部分进行讲解:java:我们写Java代码的地方,业务功能都在这里实现res:存放我们各种资源文件的地方,有图片,字符串,动画,音频等,还有各种形式的XML文件1.res资源文件夹介绍:PS:说到这个res目录,另外还有提下这个assets目录,虽然原创 2017-01-09 15:47:32 · 1861 阅读 · 0 评论 -
记录Android Studio项目提交到github上的出错处理
首先是按照网上的教程进行了一次提交,具体见http://web.gxzj.com.cn/News.aspx?id=325505记得当时出现过这个错误Can't connect to repository from configured remote. You could want to check .gitconfig不能连接到远程仓库,需要检查配置文件。结果我转载 2016-12-30 11:44:28 · 372 阅读 · 0 评论