自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(126)
  • 资源 (2)
  • 收藏
  • 关注

原创 内存管理机制

在Android中,垃圾回收(GC, Garbage Collection)是通过JVM来实现的,JVM会定期检查对象是否可达,以此来决定哪些对象是可以被回收的。回收的时候就可能杀死那些正在占用内存的进程。所以操作系统需要有一个合理的杀死占用内存的进程的机制,以保证把副作用降到最低。GC Roots包括虚拟机栈中引用的对象、本地方法栈中Native方法引用的对象、方法区中类静态属性引用的对象以及方法区中常量引用的对象。这里我们注意,前台进程,可见进程,服务进程,正常情况下他是绝对不会被杀死和回收的。

2024-03-27 17:50:34 296

原创 android四大组件之一ContentProvider

ContentProvider 是 Android 中用于实现数据共享的一种组件,它可以让不同的应用程序之间共享数据。数据通常以表格的形式组织,类似于数据库的表。其他应用程序可以通过 ContentResolver 来查询或修改这些数据。

2024-03-22 22:28:33 295

原创 Handler的post与sendMessage的区别和应用场景

两者在本质上都没有什么区别。post方法适合单一的场景,实现起来比较方便。sendMessage()适合需要作条件判断的场景。区别在于post实现起来比较简单。而sendMessage()则需要自己重写handleMessage()方法。

2024-03-22 22:24:26 261

原创 创建Message对象的方式及区别?Message.obtain()怎么维护消息池 ?Handler 有哪些发送消息的方法?

Handler 有多种发送消息的方法,包括 sendMessage()、sendMessageDelayed()、sendEmptyMessage()、sendEmptyMessageDelayed() 等。这些方法的主要区别在于是否延迟发送消息以及是否携带数据。消息池使用Message 链表结构实现,消息池默认最大值 50。消息在loop中被handler分发消费之后会执行回收的操作,将该消息内部数据清空并添加到消息链表的表头。下面两个方式是从对象池中获取,可以避免message对象重复的创建。

2024-03-22 22:21:25 264

原创 一个线程可以有几个Handler,几个Looper,几个MessageQueue对象?

在Looper的prepare方法中创建了Looper对象,并放入到ThreadLocal中,并通过ThreadLocal来获取looper的对象, ThreadLocal的内部维护了一个ThreadLocalMap类, ThreadLocalMap是以当前thread做为key的, 因此可以得知,一个线程最多只能有一个Looper对象。一个线程可以有多个Handler,但是只有一个Looper对象,只有一个MessageQueue对象。

2024-03-22 22:09:45 242

原创 Handler 导致的内存泄露的原因及解决方案?

Handler 导致的内存泄露通常是因为 Handler 持有 Activity 或其他 Context 的引用,而这个 Handler 又被其他长生命周期的对象(如静态变量、线程等)持有。当 Activity 被销毁时,由于 Handler 仍然持有其引用,导致 Activity 无法被垃圾回收器回收,从而造成内存泄露。

2024-03-22 22:01:28 320

原创 Handler原理?子线程可以创建Handler吗?主线程loop在哪第一次被调用的?

在子线程中首先调用Looper.prepare(),然后最后还需要调用Looper.loop方法。主线程的 Looper 在 Android 应用程序启动时由 ActivityThread 类创建,并在主线程的 run 方法中调用 Looper.loop() 方法开始运行。在子线程中不能直接创建 Handler,因为子线程默认没有 Looper。只有主线程(UI线程)中可以直接创建Handler,因为主线程在启动时会自动创建 Looper。

2024-03-22 21:44:19 302

原创 Android中广播发送和接收的原理

来注册的,这样做的好处是可以随时的注册或者注销广播,而且优先级要更高一点,但缺点是程序退出了,广播也就收不到了。来实现的,这样做的好处是即使程序没有运行,也能接收到广播消息,但是要比动态注册的广播的优先级低!而且静态注册的广播接收器的生命周期受限于应用程序的生命周期。广播可以通过静态注册或者动态注册的方式来接收 接受者的注册,并在主线程的onRecevier()方法中处理收到的消息!广播发送者(发布者)发送广播消息,广播接收者(订阅者)接受并处理这些消息。),以便接收者过滤接收这个广播消息。

2024-03-22 18:54:48 265

原创 Activity的四种启动模式以及应用场景

该模式下的Activity在栈内只能有一个实例,如果在栈内的话就复用该activity,且把它上边的activity从栈内移除,让该activity处于栈顶。就是说如果当前这个Activity实例处于栈顶的话,那么就直接复用这个activity,否则就创建实例。使用场景:登录页面、WXPayEntryActivity、WXEntryActivity 、推送通知栏。activity的实例在一个单独的栈中,这个栈内也只有这一个activity实例。每次启动一个Activity实例时,都会创建一个新的实例。

2024-03-22 15:24:52 385

原创 Activity的生命周期

activity跳转 在各种情况下 (ActivityA跳转ActivityB,按下home键,锁屏键,横竖屏切换)的生命周期变化。

2024-03-22 11:35:04 384

原创 Android基础面试题目汇总

Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的。了解ActivityManagerService吗?本地广播和全局广播的区别。

2024-03-22 11:00:30 857

原创 Connect to dl.google.com:443 failed: connect time out

2、如果本地.gradle目录中未缓存配置的版本,则会先远程下载指定的gradle版本,Android studio 中默认配置了下载路径dl.google.com,该域名指定一个IP,正常连接通畅的情况是,gradle版本下载成功;1、如果本地.gradle目录中已缓存当前的版本,则不受影响,gradle插件版本校验成功,会顺利的使用当前gralde版本编译工程代码。用记事本打开hosts文件,然后在最后一行添加 203.208.50.33 dl.google.com,然后保存。

2024-03-18 18:16:02 511

原创 hosts文件丢失了怎么办?

hosts文件的位置:C:\Windows\System32\drivers\etc。完成后将打开hosts文件,将其关闭即可。接下来输入a,然后按Enter键。(win+R 然后cmd)然后按Enter键。

2024-03-18 17:46:48 505

原创 Android什么情况下会出现内存泄漏以及怎么解决?

可以把上面内存泄漏的几种情况大概分为三类。

2024-03-16 22:18:22 589

原创 内存泄漏的检测,解决方案以及示例

内存泄漏是指在程序中申请的内存空间在不再使用时没有被正确释放,导致内存的占用越来越大,最终可能导致程序崩溃或者系统资源不足等问题。在Android开发中,内存泄漏是一个常见的问题,尤其是在使用了一些复杂的组件或者异步操作时更容易出现。

2024-03-16 18:30:28 1069

原创 android中单例模式为什么会引起内存泄漏?

当这个Activity退出时Activity应该被回收, 但是单例中又持有它的引用,导致Activity回收失败,造成内存泄漏。因为单例的静态特性使得单例的生命周期和应用的生命周期一样长, 如果一个对象已经不需要使用了,但是单例对象还持有该对象的引用,那么这个对象就不能被正常回收,因此会导致内存泄漏。这样不管外面传入什么Context,最终都会使用Applicaton的Context,而单例的生命周期和应用的一样长,这样就防止了内存泄漏。①点击返回键,退出MainActivity。

2024-03-16 18:19:46 653

原创 单例模式--Andorid中的设计模式

单例模式是一种创建型。

2024-03-16 16:27:18 1008

原创 Android中使用intent可以传递哪些类型的数据?

的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,parcelable的编程实现更加复杂,但具有更高的效率和性能,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据。对于一些小型数据的传递,如传递一些基本类型的数据、字符串或者少量的图片等,使用Intent传递是非常方便的。在处理大数据传递时,我们可以选择其他的方式来传递数据,而不是仅仅使用Intent。

2024-03-16 15:37:13 570

原创 Activity各种情况下的生命周期!(横竖屏切换,HOME键)

onRestoreInstanceState(Bundle outState)会在以下情况被调用:1、屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)2、由于内存紧张导致后台运行的程序被kill掉时(这种不太好模拟)

2024-03-16 12:17:35 384

原创 Android 实现 子线程 主线程 切换

在 Android 开发中,我们经常需要在子线程中执行一些耗时操作,例如网络请求或者数据库操作。然而,由于 Android 的主线程(也称为 UI 线程)负责处理用户交互和更新界面,所以我们不能直接在子线程中更新 UI。为了解决这个问题,我们需要将子线程切换到主线程执行 UI 更新操作。

2024-03-13 10:55:47 692

原创 Android 子线程为什么不能更新UI?

Android 应用的 UI 是在主线程上进行绘制和更新的。当我们在子线程中直接进行 UI 更新时,会导致以下问题:1. 线程安全问题:多个线程同时操作 UI,可能导致 UI 组件的状态不一致或者出现竞争条件。2. 卡顿和 ANR:如果在主线程中执行耗时操作,会导致主线程被阻塞,用户界面无法响应用户的输入,甚至可能发生 ANR(Application Not Responding)错误。(一)现象在子线程中直接更新UI就会crash,报错如下:android.view.ViewRoot

2024-03-13 10:49:22 1195

原创 MVC,MVP的对比(附代码)一次搞懂!

/账号信息//账号名称//账号等级。

2024-03-09 19:01:58 368

原创 Android Studio报错:connect refused

Android Studio报错:connect refused

2024-01-02 18:46:46 834

原创 Plugin [id: ‘com.android.application‘, version: ‘8.1.2‘, apply: false] was not found in any of the f

Plugin [id: 'com.android.application', version: '8.1.2', apply: false] was not found in any of the following sources:

2024-01-02 13:20:57 2288

原创 各个版本的gradle下载

各个版本gradle下载

2023-12-27 18:45:09 1364

原创 Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle-6.5-bin

Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-6.5-bin

2023-12-27 18:41:42 2646 1

原创 Https相关

HTTPS通信原理-证书交换_BlackFee的博客-CSDN博客_证书交换HTTPS的协议需求与密钥交换过程 - 简书协议需求1、对内容进行加密建立一个信息安全通道,来保证数据传输的安全。SSL/TLS协议进行加解密,常用的非对称算法为RSA。公钥加密,私钥解密。2、能够进行身份认真确认对方的真实性。证书由受信任的数字证书机构(Certificate Authority, CA)所颁发的,就认为对方是真的。3、能够保证数据的完整性防止内容被第三方冒充或篡改。4、需要具备

2022-01-25 15:08:17 3308

原创 Android屏幕截屏(全屏bitmap)

调用:Bitmap bitmap = setConfig(getScreenShot(mContext));工具类:/** * 获取当前屏幕截图 */ public static Bitmap getScreenShot(Context context) { try { DisplayMetrics dm = context.getResources().getDisplayMetrics(); ..

2022-01-25 10:23:06 2730

原创 Android自定义通用 弹窗(AppCompatDialogFragment实现)

Android自定义通用 弹窗package com.iflytek.zhiying.dialog;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;imp...

2022-01-25 10:12:05 2565 1

原创 Git详解

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

2021-12-09 17:02:46 110

原创 AndroidStudio不提示报错信息

解决方式1.AS升级后默认设置成了省电模式,设置成省电模式了的话,AS会禁掉很多辅助功能,达到省电的目的。所以代码自动提示、错误提示什么的也被禁掉了。关闭省电模式:File--->将Power Save Mode前面的勾√去掉2.你的android studio安装了Butter Knife的插件,打开File--->Setting--->Plugins--->找到ButterKnife--->鼠标右键-Uni...

2021-11-16 10:14:07 5068 1

原创 Android读取系统节点

/** * 需要读一下系统的节点/sys/class/aml_lt9211_2/lcd_pwr,屏幕在亮的时候才能手动调节屏幕亮度 * 1的时候是亮,为0是灭 * */ private static final String DLP_FREEZE_PATH = "/sys/class/aml_lt9211_2/lcd_pwr"; public static boolean getScreenIfBright() { String value ..

2021-10-12 18:01:03 899

原创 Android自定义纵向的SeekBar(解决fromuser参数一直为false的问题)

package com.sidebar.pro.view;import android.annotation.SuppressLint;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.util.AttributeSet;import android.util.Log;import android.view.Mo.

2021-10-12 17:58:52 828

原创 Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是”活动”的意思,但是主席觉得这样翻译有些生硬,直接翻译成“界面”可能更好,的确,Activity主要也是用于UI效果的呈现,不过两者翻译都不为过,我们知其意就行了,正常情况下,我们除了Window,Dialog,Toast,我们还能见到的就只有Activity了,他需要setContentV...

2021-09-13 18:28:33 225

原创 Android中WindowManger的层级分析

一. Window 分类应用 Window(ApplicationWindow: 对应一个 Acitivity) 子 Window (SubWindow:不能单独存在,需要依附在特定的父 Window 中,比如常见的一些 Dialog 就是一个子 Window) 系统 Window (SystemWindow:需要声明权限才能创建的 Window,比如 Toast 和系统状态栏都是系统 Window)二. Window层级Window 是分层的,每个 Window 都有对应的 z...

2021-09-08 15:24:06 1932

原创 Android SystemProperties简介

Systemproperties类在android.os下,但这个类是隐藏的, 上层程序开发无法直接使用。使用方法:在app-build.gradle文件中 android标签下,添加如下代码段android { ...... //以下是为了找到android.os.SystemProperties这个隐藏的类 String SDK_DIR = System.getenv("ANDROID_SDK_HOME") //("TAG", "SDK_DI.

2021-09-06 14:44:35 542

原创 Android自定义ScrollView(实现反弹弹性布局效果,仿IOS反弹ScrollView)

package com.jyr.myapplication;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.animat...

2021-09-03 11:26:32 379

原创 Android---HandlerUtils

package com.sidebar.pro.utils;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;public class HandlerUtils { private static final Handler sUiHandler; private static final Handler sWorkingHandler; static .

2021-08-25 18:19:48 307

原创 Android---GaussianBlurUtils---设置高斯模糊背景

package com.sidebar.pro.utils;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.drawable.BitmapDrawable;import android.view.View;public class Gaussian.

2021-08-25 18:14:36 517

原创 Android---SpUtil---轻量级的数据存储

package com.sidebar.pro.utils;import android.content.SharedPreferences;import android.preference.PreferenceManager;import com.sidebar.pro.BaseApplication;public class SpUtil { private static SharedPreferences sp = PreferenceManager.ge.

2021-08-25 18:05:34 507

dex-tools-2.1.rar

基于dex2jar 2.0版本解决 java.lang.RuntimeException: can not merge I and Z问题

2020-07-02

smali2jar.rar

1.将smali转dex我们需要用到smali.jar这个jar,然后在当前目录输入:java -jar smali.jar test/smali/ -o classes.dex 2.将dex文件转成jar包,我们需要用到dex2jar-2.0这个工具,然后输入如下命令:d2j-dexjar classes.dex

2020-07-02

空空如也

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

TA关注的人

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