自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 收藏
  • 关注

原创 Android获取文件夹路径

获取/data/data/下路径String printTxtPath = getApplicationContext().getPackageResourcePath() + "/files/" + fileName;=>/data/app/com.example.test/files/test.txtString printTxtPath = getApplicationContext().getFilesDir().getAbsolutePath();=> /data/da.

2020-11-13 11:26:06 20

原创 Android加载高清长图

app项目开发过程中,大都有查看图片详情的功能模块。实现的方式一般都是通过viewpager+photoView+Glide的方式。这种方式下,如果碰到加载超长图,比如说高清版的清明上河图/世界地图,肯定就加载不出来了。这个时候BitmapRegionDecoder就派上了用场了布局文件<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/a.

2020-11-10 13:59:40 39

原创 Activity 四种启动模式

(一)、基本描述1. standard:标准模式:如果在 mainfest 中不设置就默认 standard;standard就是新建一个 Activity 就在栈中新建一个 activity 实例;2. singleTop:栈顶复用模式:与 standard 相比栈顶复用可以有效减少 activity重复创建对资源的消耗,但是这要根据具体情况而定,不能一概而论;3. singleTask:栈内单例模式,栈内只有一个 activity 实例,栈内已存 activity实例,在其他 activity

2020-11-09 16:51:07 22

原创 Handler 引起的内存泄露原因以及最佳解决方案

Handler 允许我们发送延时消息,如果在延时期间用户关闭了 Activity,那么该Activity 会泄露。这个泄露是因为 Message 会持有 Handler,而又因为 Java 的特性,内部类会持有外部类,使得 Activity 会被 Handler 持有,这样最终就导致 Activity 泄露。解决该问题的最有效的方法是: 将 Handler 定义成静态的内部类,在内部持有Activity 的弱引用,并及时移除所有消息。示例代码如下:private static class Saf.

2020-11-09 16:11:20 8

原创 Android 消息机制的原理及源码解析

一、消息机制概述1.消息机制的简介 在 Android 中使用消息机制,我们首先想到的就是 Handler。没错, Handler 是Android 消息机制的上层接口。 Handler 的使用过程很简单,通过它可以轻松地将一个任务切换到 Handler 所在的线程中去执行。通常情况下, Handler 的使用场景就是更新 UI。如下就是使用消息机制的一个简单实例:public class Activity extends android.app.Activity { pri...

2020-11-09 15:46:44 19

原创 Handler post 方法原理?

一.源码分析1.点进去看 postDelayed()中的方法。里面调用 sendMessageDelayed 方法,和post() 里面调用的方法一样。public final boolean postDelayed(Runnable r, long delayMillis){ return sendMessageDelayed(getPostMessage(r), delayMillis);}2. 我们再点进去看下 sendMessageDelayed()方法,pub..

2020-11-09 14:48:59 8

原创 如何在子线程中创建 Handler?

在子线程中创建 handler,要确保子线程有 Looper,UI 线程默认包含 Looper。我们需要用到一个特殊类HandlerThread。这个类可以轻松的创建子线程 handler创建步骤:1.创建一个 HandlerThread,即创建一个包含 Looper 的线程HandlerThread 的构造函数有两个public HandlerThread(String name) { super(name); mPriority = Process.THREAD_PRIORI

2020-11-09 14:25:39 15

原创 Messagequeue 的数据结构是什么?为什么要用这个数 据结构?

为什么要用 Message Queue?1.解耦在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束2.冗余有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在被许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之

2020-11-09 14:11:54 48

原创 Handler Looper Message 关系是什么?

分析 Handler首先我们来分析分析一下 Handler 的用法,我们知道,要创建一个 Handler 对象非常的简单明了,直接进行 new 一个对象即可,但是你有没有想过,这里会隐藏着什么注意点呢。现在可以试着写一下下面的一小段代码,然后自己运行看看:public class MainActivity extends ActionBarActivity { private Handler mHandler0; private Handler mHandler1; .

2020-10-27 11:50:08 30

转载 android 优秀框架整理

程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助!1. Retrofit  一句话介绍:Retrofit是一款类型安全的网络框架,基于HTTP协议,服务于Android和java语言上榜理由:Retrofit以21.8k的stars量雄踞github中android子标题榜首,第一当之无愧。官网地址http://square.github.io/re.

2020-10-26 17:33:07 177

原创 Zxing二维码切换横屏扫描

默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候:<activity android:name=".CaptureActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />这时候扫描,会发现扫描效果变形,方向不对。可按以下步骤进行修改:1、修

2020-10-26 16:27:58 55 1

转载 一篇最好懂的HTTPS讲解

https这项技术现在已经应用得非常广泛了。随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https,http的淘汰也正式进入了倒计时。其实https对于客户端开发人员来说并没有什么需要特别注意的地方,因为代码和写http请求时并没有什么两样。但也正是因为这个原因,导致许多客户端开发人员对https并不了解,只知道它是安全的加密网络传输,对其具体的工作原理却一无所知。那么客户端开发人员到底需不需要了解https呢?我认为还是有一定必要的,掌握了http

2020-10-09 11:52:58 40

原创 Recylerview刷新图片闪烁

当数据改变时,我们会调用 notifyDataSetChanged,这个时候列表会刷新,为了使 url 没变的 ImageView 不重新加载(图片会一闪),我们可以用adapter.setHasStableIds(true);使用这个,相当于给ImageView加了一个tag,tag不变的话,不用重新加载图片。但是加了这句话,会使得 列表的 数据项 重复!! 我们需要在我们的Adapter里面重写 getItemId就好了。@Overridepublic long getItemId(.

2020-09-21 14:04:30 28

原创 Android 常用控件问题解决方法

1. 用代码设置ImageView的src和background设置ImageView的src:setImageDrawable(Drawable drawable);setImageBitmap(Bitmap bm);setImageResource(int resId);代码设置ImageView的background:setBackgroundReource(int resid)setBackground(Drawable background)setBackgroun

2020-09-21 11:44:01 191

原创 AOP在Android中的使用(防止快速点击)

1.根目录的build.gradle添加如下代码 dependencies { classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.8' }2.app目录下的build.gradle添加如下代码apply plugin: 'android-aspectjx'aspectjx { exclude 'androidx','com.google','com.squareup','com.a

2020-09-14 16:27:43 148

原创 IllegalStateException: Only fullscreen opaque activities can request orientation

原因:这是因为 Activity里同时 指定透明主题和固定方向,在Android 8.0就会报这个错解决方法:不同时指定这两个参数

2020-08-31 16:07:39 33

原创 Android 全屏切换到非全屏 页面抖动

问题:全面屏退回非全面屏,然后由于状态栏的出现,整个界面下移一个状态栏高度的问题。造成整个页面闪一下,下沉一下的感觉,非常不爽的体验。解决方法:问题2的解决方法如下: @Override public void onBackPressed() { this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); DelayedTaskUtil.delayMillis.

2020-08-28 18:02:07 113

原创 Android将screenOrientation设置为portrait不起作用

如果下面两种设置都不起作用 方法1. <activity android:name=".activity.main.uniapp.modify.ModifyUniActivity" android:screenOrientation="portrait"/> 方法2. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);那直接在activity中设置 @Overri

2020-08-17 17:07:56 312

原创 Android studio查找所有汉字位置

问题在Android多语言适配得时候,一个个查找代码得文字位置是很痛苦的解决方案通过正则表达式,全局搜索。^((?!(\*|//)).)+[\u4e00-\u9fa5]

2020-06-30 14:37:06 123

原创 修改第三方aar包

1.将aar包改为zip包,直接打开(不要解压),可以直接替换里面的资源。最后改回aar包即可2.如果需要修改里面的jar包,将jar包改为zip包,直接打开(不要解压),直接修改保存即可。最后直接改为jar包即可...

2020-06-28 18:56:49 191

原创 Android跨进程通信-AIDL实现步骤

按照下面的步骤即可完成8.拿到contactManager接口,直接调用接口9.如果不是同一个应用,可以把aidl相关文件拷贝到另一个应用,启动远程service,按照上面的方法调用即可

2020-06-04 18:12:02 64

原创 提高Android studio编译速度的方法

1.gradle.properties中修改org.gradle.jvmargs=-Xmx1024m2.app的build.gradle中添加dexOptions { javaMaxHeapSize "4g"}

2020-05-28 12:54:42 257

原创 Android来电屏幕亮屏解锁

做即时通讯软件,当有语音或视频来电时,需要默认亮屏解锁就需要下面的操作了 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED //锁屏显示 | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD //解锁 ...

2020-04-27 13:27:21 315

原创 WebView加载HTML代码适配问题

1、WebView不会自动换行,它会把连在一起的字母当成一个表情或者单词,或者,当遇到一个完整的URL链接时,会强制把URL放在一行,导致WebView可以左右滑动解决方法:这中问题不是WebView设置能够解决的,我们需要改动HTML的代码,在返回的HTML代码前直接拼接下边代码: //就是有时候web view不会自动换行,它会把连在一起的字母或者表情当作是一个单词, //...

2020-04-26 14:37:58 105

原创 webrtc通信流程图

webrtc通话过程:如果是语音通话,首先通过配置信息,判断是否开启webrtc功能。 如果开启了或者是视频通话,拨号方会通过本地数据库获取接听方应用平台类型、版本号信息。现在只有在应用是Android 以及Android版本号是大于等于241才能够使用webrtc功能。如果本地没有保存对方版本信息等,通过接口获取并以json格式包存到本地。 拨号方首先以cmd命令的形式通过si...

2020-03-31 17:27:31 628

原创 webrtc介绍

先了解几个概念:WebRTC 全称是 Web Real-Time Communication,即网页即时通信ICE(交互式连接建立的协议): ICE 的工作是找到连接两个对等体的最佳路径, ICE 可以执行直接连接ice算法是寻找最低等待时间的路径去连接两端,通常采用以下顺序寻找:1.直接的UDP连接 (在且仅在这种情况下,一个STUN的服务器会被用来查找主机端面向网络的地址)。...

2020-03-31 17:18:18 274

原创 读取本地视频文件时间

/** * 获取本地视频时长 * * @return */ public static int getLocalVideoDuration(String videoPath) { int duration; try { MediaMetadataRetriever mmr = new Med...

2020-02-18 15:39:44 198

原创 android studio引用java8后编译报错解决方法

1.在项目的build.gradle(Project)文件中添加 dependencies { classpath 'me.tatarka:gradle-retrolambda:3.6.1'//这个是重点 }2.在主 module (app) 的 build.gradle 里配置apply plugin: 'me.tatarka.retrolambda'//这个...

2020-01-21 13:36:40 394

原创 Android 仿微信Webview加载网页进度和失败重试

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" style="@style/WHFu...

2020-01-17 14:09:08 220

原创 EditText不跟随输入框弹出

EditText最外面布局添加android:fitsSystemWindows="true"即可例如:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height...

2020-01-06 10:55:37 101

原创 使用Dialog状态栏变黑问题

Window window = getWindow();WindowManager.LayoutParams lp = window.getAttributes();lp.width = WindowManager.LayoutParams.MATCH_PARENT;lp.height = WindowManager.LayoutParams.MATCH_PARENT; // 如果将高...

2020-01-02 16:23:09 1197

原创 抓取日志到电脑桌面(可抓底层错误)

adb logcat -v time > C:\Users\wahaha\Desktop\crach1.log

2019-12-18 12:26:46 99

原创 Android动态权限申请

这个工具类优点:可以在能拿到Context的任意地方去申请权限,不用依赖activity的onRequestPermissionsResult回调方法获取返回结果。 //可以一次申请一个或多个权限,而且只需下面这一段代码就行了,//不需要在其他地方额外再加代码,很简单有木有 AppPermissionUtil.requestPermissions(this, new Str...

2019-12-06 12:28:11 130

原创 添加忽略文件

.gitignore文件下添加*.iml.gradle/local.properties/.idea/workspace.xml/.idea/libraries.DS_Store/build/captures.externalNativeBuildgradle*.imlgradlewgradlew.batlocal.propertiesbuild.idea.g...

2019-12-04 11:26:44 104

原创 Android studio下载第三方库下载不下来,或者很慢

allprojects { repositories {// maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' }// maven { url 'http://developer.huawei.com/repo/' } maven { url 'https://...

2019-12-04 11:04:37 2154

原创 热修复成功了需要杀死进程,重启APP,方法如下

public void restartApp() { //启动页 Intent intent = new Intent(OuYuBaseApplication.getBaseApplication(), SplashActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ...

2019-11-07 16:50:12 234

原创 Could not get resource 'https://jcenter.bintray.com/com/

根目录的build.gradleallprojects { repositories { maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'http://developer.huawei.com/repo/' } jcente...

2019-10-28 16:16:36 1441 1

原创 Tinker热修复使用流程和注意事项

2019-10-25 18:56:33 71

转载 Sophix及热修复原理介绍

Sophix相关书籍深入探索Android热修复技术原理这本书主要讲解了Android的热修复中的热部署,冷部署以及资源和so库的修复技巧。全文主要讲Sophix应对以上四个方面的技术解析,不管是自家产品还是业界其他方案的横纵对比,Sophix技术目前都是最优的。补丁小,合成不占太多空间和性能。 对代码的侵入小,对native代码的hook也精简,做到最大兼容。 支持的修复范围广。支持...

2019-10-22 16:16:48 255

转载 为什么选择Tinker作为热修复方案?

修复这种非官方支持的非常规开发方式,在采用前一定要权衡清楚其作用与代价。一. Java层热修复方案由于Native层的热修复方案在兼容性和稳定性上存在缺陷因而此处不讲, 在Java层的做法主要有两种1. 优先查找补丁Dex优先查找补丁Dex原理将修改过的类汇集成一个Dex,在加载类时让ClassLoader优先加载修改过的类.方案基于ClassLoade...

2019-10-22 16:15:24 178

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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