Android性能优化(一)--关于内存溢出

Android性能优化之OOM篇 内存溢出是指程序在运行过程中占用的内存超过了系统分配的限制,导致无法为新对象分配内存,从而引发异常或崩溃。在Android开发中,系统会为每个应用分配一定的内存配额,当应用超出此配额时就会触发OOM错误。原因:直接加载过大的图片会占用大量内存。解决方案:通过进行图片压缩,或者使用优化的图片加载库如Glide、Picasso。合理规划缓存大小:根据设备内存情况,动态设置缓存的大小(如总内存的1/8)。使用LruCache管理缓存:确保缓存大小不会超过预设内存限制,并使用LRU策略移除不常用的缓存条目。 阅读详情

一个善于自嘲的人,不是因为内心强大,而只是想巧妙地让别人闭嘴。(心情标签)这里写图片描述

关于内存溢出的问题

关于栈内存溢出的问题,想必大家或多或少都会遇到过,不像好久不见,却如胶似漆,不经意间都会碰到<( ̄︶ ̄)>.我同桌曾经还对我那么一句煽情却又无比夸张的话,”我敲代码一天不遇到内存溢出,我就难受“,他也是够了…..
今天就以我目前所了解到各种关于内存溢出产生的原因和解决方法,分别与大家分享分享,内容不当或知识点理解片面错误,还望指出.

1.关于优化的了解

Android堆内存也可自己定义大小

对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,
我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的dalvik.system.VMRuntime类来设置最小堆内存为例:

private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;

VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); 
//设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理
2.从一个加载图片时产生内存溢出产生的问题开始分析

图片过大导致OOM
Android中用bitmap时很容易内存溢出,比如报如下错误:Java.lang.OutOfMemoryError :bitmap size exceeds VM budget。

Picasso.with(context).load(rowItem.getProductImages().get(0)).into(holder.productImageView);
错误: 2771-2793/com.koove E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 31961100 byte allocation with 4194304 free bytes and 27MB until OOM"
03-25 09:53:23.666    2771-2793/com.koove D/skia﹕ --- decoder->decode returned false

1.回到原点:想通过这些代码实现什么功能?
加载一些图片是照片能正常显示到模拟器中

2.产生的原因?
因为 ImeView 在底层创建图片层的时候 会占用很大的内存空间,Android加载大量图片的时候就会造成内存溢出

3.分析:
前面说到,imageView 在底层创建图片层的时候 会占用很大的内存空间,所以我们可以

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的source.

decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间

4. 解决或避免的方法:
♥解决方法一:
在从网络或本地加载图片的时候,只加载缩略图。
这个方法的确能够少占用不少内存,优点是图像在尽可能低的分辨率的情况下, 较低的分辨率意味着更少的数据保存在缓存中。可是它的致命的缺点就是,因为加载的是缩略图,所以图片失真就比较严重咯,

♥解决方法二:
读取图片时注意方法的调用,适当压缩
这里写图片描述

以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。

♥解决方法三:
运用JAVA的软引用,及时地recyle()操作 ,进行图片缓存,将经常需要加载的图片,存放在缓存里,避免反复加载。
这里写图片描述

♥解决方法四:
及时销毁不再使用的Bitmap对象。


3.归纳内存溢出缘由

一)是否App中的类中和引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str;

二)是否App中使用了大量的递归或无限递归(递归中用到了大量的建新的对象)

三)是否App中使用了大量循环或死循环(循环中用到了大量的新建的对象)

四)检查App中是否使用了向数据库查询所有记录的方法。即一次性全部查询的方法,如果数据量超过10万多条了,就可能会造成内存溢出。所以在查询时应采用“分页查询”。

五)检查是否有数组,List,Map中存放的是对象的引用而不是对象,因为这些引用会让对应的对象不能被释放。会大量存储在内存中。

六)检查是否使用了“非字面量字符串进行+”的操作。因为String类的内容是不可变的,每次运行”+”就会产生新的对象,如果过多会造成新String对象过多,从而导致JVM没有及时回收而出现内存溢出。

4. 什么情况下回导致内存溢出

内存溢出的几点原因:
1. 资源释放问题
程序代码的问题,长期保持某些资源,如Context、Cursor、IO流的引用,资源得不到释放
造成内存泄露。
2. 对象内存过大问题
保存了多个耗用内存过大的对象(如Bitmap、XML文件),造成内存超出限制。
3.static 关键字的使用问题
static是Java中的一个关键字,当用它来修饰成员变量时,那么该变量就属于该类,而不是
该类的实例。所以用static修饰的变量,它的生命周期是很长的,如果用它来引用一些资源耗费
过多的实例(Context的情况最多),这时就要谨慎对待了。
这里写图片描述
以上的代码是很危险的,如果将 Activity 赋值到 mContext 的话。那么即使该 Activity 已经
onDestroy,但是由于仍有对象保存它的引用,因此该Activity依然不会被释放。

针对static的解决方案

1) 应该尽量避免static成员变量引用资源耗费过多的实例,比如Context。
2) Context尽量使用ApplicationContext,因为Application的Context的生命周期比较
长,引用它不会出现内存泄露的问题。
3) 使用 WeakReference 代替强引用。比如可以使用 WeakReference
mContextRef;
4. 线程导致内存溢出
线程产生内存泄露的主要原因在于线程生命周期的不可控。

针对这种线程导致的内存泄露问题的解决方案:
(一) 将线程的内部类,改为静态内部类(因为非静态内部类拥有外部类对象的强引用,而静
态类则不拥有)。
(二) 在线程内部采用弱引用保存Context引用。

5.利用工具进行辅助排查

(一)TraceView简介
Traceview是 Android平台特有的数据采集和分析工具,它主要用于分析 Android中应用程
序的hotspot(瓶颈)。Traceview本身只是一个数据分析工具,而数据的采集则需要使用Android
SDK中的Debug类或者利用DDMS工具。

(二)heap简介
heap工具可以帮助我们检查代码中是否存在会造成内存泄漏的地方。
用heap监测应用进程使用内存情况的步骤如下:
1.启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;
2.点击选中想要监测的进程,比如system_process进程;
3.点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标;
4.点击Heap视图中的“Cause GC”按钮;
5.此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况。
说明:
a. 点击“Cause GC”按钮相当于向虚拟机请求了一次gc操作;
b. 当内存使用信息第一次显示以后,无须再不断的点击“CauseGC”,Heap视图界面会定时
刷新,在对应用的不断的操作过程中就可以看到内存使用的变化;
c. 内存使用信息的各项参数根据名称即可知道其意思,在此不再赘述。

(三)allocation tracker 简介

allocation tracker是内存分配跟踪工具
步骤:
运行DDMS,只需简单的选择应用进程并单击Allocation tracker 标签,就会打开一个新的窗口,
单击“Start Tracing”按钮;
然后,让应用运行你想分析的代码。运行完毕后,单击“Get Allocations”按钮,一个已分配对象
的列表就会出现第一个表格中。
单击第一个表格中的任何一项,在表格二中就会出现导致该内存分配的栈跟踪信息。通过allocation
tracker,不仅知道分配了哪类对象,还可以知道在哪个线程、哪个类、哪个文件的哪一行。

6. 如何避免OOM异常

1、图片过大导致OOM
解决方法:
方法1: 等比例缩小图片

方法2:对图片采用软引用,及时地进行recyle()操作

方法3:使用加载图片框架处理图片,如专业处理加载图片的ImageLoader图片加载框架。还有XUtils的BitMapUtils来做处理

2、界面切换导致OOM
一般情况下,开发中都会禁止横屏的。因为如果是来回切换话,activity 的生命周期会重新销毁
然后创建。
有时候我们会发现这样的问题,横竖屏切换N次后 OOM了。

解决办法:
1、看看页面布局当中有没有大的图片,比如背景图之类的。
去除xml中相关设置,改在程序中设置背景图(放在onCreate()方法中):

Drawable drawable = getResources().getDrawable(R.drawable.id);    ImageView imageView = new ImageView(this);    
imageView.setBackgroundDrawable(drawable);

在Activity destory 时注意,drawable.setCallback(null); 防止Activity得不到及时的释放

2.或者可以直接把 xml 配置文件加载成 view 再放到一个容器里,然后直接调用
this.setContentView(View view);方法,避免xml的重复加载。

3、 在页面切换时尽可能少地重复使用一些代码
比如:重复调用数据库,反复使用某些对象等等……

3.查询数据库中有没有关闭游标
程序中经常会进行查询数据库的操作,如利用一个号码归属地查询的小demo ,
但是经常会有使用完毕Cursor后没有关闭的情况。如果
我们的查询结果集比较小,对内存的消耗不容易被发现,只有在常时间大量操作的情况下才会出现内
存问题,这样就会给以后的测试和问题排查带来困难和风险。

4、构造Adapter时,没有使用缓存的 convertView
在使用ListView的时候通常会使用Adapter,那么我们应该尽可能的使用ConvertView。
为什么要使用convertView?
当convertView为空时,用setTag()方法为每个View绑定一个存放控件的ViewHolder对象。
当 convertView 不为空,重复利用已经创建的 view 的时候,使用 getTag()方法获取绑定的
ViewHolder对象,这样就避免了findViewById对控件的层层查询,而是快速定位到控件。
5、Bitmap对象不再使用时调用recycle()释放内存
有时我们会手工的操作Bitmap对象,如果一个Bitmap对象比较占内存,当它不再被使用的时
候,可以调用Bitmap.recycle()方法回收此对象的像素所占用的内存,但这不是必须的,视情况而定。
6、其他
Android 应用程序中最典型的需要注意释放资源的情况是在 Activity 的生命周期中,在onPause()、onStop()、 onDestroy()方法中需要适当的释放资源的情况。使用广播没有注销也会产生OOM。


嗯.关于内存溢出的问题肯定不止于这些,今天就写到这,之后遇到再进行更新改进吧.针对肯能出现的错误还请大家指出,晚安.<( ̄ˇ ̄)/

Android 性能优化--内存篇 Android 性能优化–内存篇 Android内存优化是我们性能优化工作中比较重要的一环,主要包括两方面的工作: 优化RAM,即降低运行时内存。目的是防止程序发生OOM异常,以及降低程序由于内存过大被LowMemoryKiller(LMK)机制杀死的概率。同时,不合理的内存使用会使GC次数大大增多,从而导致程序变卡。 优化ROM,即降低程序占ROM的体积,防止ROM空间不足导致程序无法安装等问题。 前言 Android中关于内存优化的问题主要包括三个方面: Memory Leaks 内存泄漏 Out 阅读详情

相关推荐

Android ListView性能优化与图片加载内存溢出解决方案

在Android应用开发中,ListView作为最常用的列表控件之一,广泛应用于信息流、商品展示、消息列表等场景。然而,在数据量较大或视图复杂度较高的情况下,ListView极易出现卡顿、滑动不流畅甚至内存溢出等问题。本章将从整体视角出发,深入剖析ListView的性能瓶颈所在,明确优化的必要性与核心目标。首先介绍ListView的基本工作原理及其与Adapter之间的交互机制;然后重点分析导致性能下降的关键因素,包括频繁的调用、布局嵌套过深、图片加载不当以及内存管理缺失等;

weixin_28933797的博客 1034

java map failed_java.lang.OutOfMemoryError: Map failed此报错如何解决

java.io.IOException: Map failed详细信息如下 :java.lang.RuntimeException:java.io.IOException:Mapfailedatcom.fr.web.core.MessageRecorder.initWriter(UnknownSource)atcom.fr.web.core.MessageRecorder.write(...

weixin_36262567的博客 1669

小新学习K8s第一天之K8s基础概念

kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。kubernetes服务,支持和工具随处可见。作用:用于自动部署,扩展和管理“容器化应用程序”的开源系统。可以理解成k8s是负责自动化运维管理多个容器化程序(比如docker)的集群,是一个生态及其丰富的容器编排框架工具。

pangdongqiqi的博客 1228

java map failed_java.lang.OutOfMemoryError:Map failed总结

常见的OOM是以下这几种:1.GC overhead limit exceeded2.Java Heap Space3.Unable to create new native thread4.PermGen Space5.Direct buffer memory6.request {} bytes for {}. Out of swap space?一直自认为不会有超过这个范围的OOM类型出现,没...

weixin_29621655的博客 561

CANoe实战:LIN Slave一致性测试全流程解析

本文详细解析了使用CANoe进行LIN Slave一致性测试的全流程,包括测试概述、环境搭建、模块集成、测试用例详解及报告分析。通过实际案例分享,帮助工程师掌握LIN 2.0/2.1/2.2、SAE J2602和ISO 17987等标准的自动化测试方法,提升汽车电子从节点的可靠性和兼容性验证效率。

weixin_42665725的博客 533

ZynqMP多核实战:如何让A53-0跑Linux,其他核裸机处理大数据(附完整配置流程)

本文详细解析了Xilinx ZynqMP多核异构计算实战,重点介绍如何配置A53-0运行Linux系统,同时让其他A53和R5核心以裸机方式处理大数据任务。内容涵盖内存划分、核间通信、Linux定制配置等关键技术,提供完整的配置流程和性能优化方案,助力开发者实现高效的多核协同开发。

weixin_30555125的博客 479

java.lang.OutOfMemoryError Failed to allocate a

问题:需求中需要定时上报定位数据,但是测试中后台关闭,导致数据本地累计1000多条,这时就不能一次上报了,因为上报的数据太大,会让配置低的手机OOM java.lang.OutOfMemoryError Failed to allocate a 3646464 byte allocation with 2783400 free bytes and 2MB until OOM com.google...

Aile 4843

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 246

java.lang.OutOfMemoryError: Failed to allocate a 22440958 byte allocation with 16777216 free bytes

关于OOM异常 其实这个异常 只会在加载大量图片,数据的时候出现,但是我这里出现的原因很2.。。 @Override public void hideProgress() { // dismissProgress(); hideProgress(); } 竟然自己掉自己了。 递归了。也没有 条件调出来,。 其实就是自己不细心。

Xiemarc的博客 2万+

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

phmatthaus的专栏 1532

【YOLOv11工业级实战】15. YOLOv11海洋监测实战:珊瑚礁健康评估(水下图像增强|机器人搭载)

摘要:本文针对珊瑚礁健康评估的海洋监测需求,基于YOLOv11提出解决方案,聚焦水下色偏、悬浮物干扰、珊瑚形态复杂三大难题。引用全球珊瑚礁监测网络(GCRMN)标准,采用CoralNet数据集,通过Jaffe-McGlamery物理模型引导增强与悬浮物去除算法,在浑浊水域(能见度<5m)实现87.3%的健康珊瑚识别率,藻类误判率低至7.2%。介绍了以BlueROV2水下机器人和Jetson AGX Orin为核心的部署方案,结合水下SLAM定位技术,实现珊瑚健康的实时评估与三维覆盖率计算。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1644

【Kafka启动报错】Caused by: java.lang.OutOfMemoryError: Map failed

参考:https://stackoverflow.com/questions/43042144/kafka-server-failed-to-start-java-io-ioexception-map-failed 报错日志 [2022-02-15 16:50:40,558] ERROR Error while deleting the clean shutdown file in dir /home/es/kafka_2.11-2.2.1/logs (kafka.server.LogDirFailureC

jast 1637

请举手回答,LDO和DC-DC有什么不同?

文章目录1 LDO是什么2 LDO典型电路3 DC-DC是什么4 DC-DC典型电路5 LDO和DC-DC区别10.2.6 小结一下 大家好,我是记得诚。 DC-DC和LDO都是电源芯片,两者差异很大,用法也不同,这篇博客讲述LDO和DC-DC的一些差异,帮助更好的认识LDO和DC-DC并进行选型。 1 LDO是什么 LDO是low dropout regulator的简称,即低压差线性稳压器,这是相对于传统的线性稳压器来说的,传统的稳压器,输入比输出要高出很多,否则无法工作,LDO可能输入比输出高1~2V

记得诚 1万+

Android性能优化之Handler内存溢出

内存溢出的定义 本来应该被回收的对象不能被回收而停留在堆内存中。 内存溢出的原因 当一个对象实例不再被使用时,正常来说应该被回收,但却因为有另外一个正在使用的对象持有它的引用,从而导致它不能被回收。这就导致了内存溢出。 ...

weixin_40763897的博客 2677

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android手机为何不再卡顿?性能优化才是安卓起飞关键

现在谈到挂载 Android系统的 手机,大部分人的印象早已不像前几年,几年前的安卓机那是用了一段时间就变得有点卡顿,用1年就卡的动弹不得,不得不每年都更换新机。

m0_64420071的博客 5190

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android开发性能优化总结(一)

安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户。 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流。 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢;动画执行过程不流畅,或者动画执行卡顿时间长;ListView列表滑动过程中卡顿,不流畅;应用程序自定义的某特定界面...

king的专栏 3万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

安卓(Android App)性能优化,解决卡顿,内存溢出等一系列问题

其实网上写安卓性能优化的文章很多,本来不想写的,但是今天突然看到一个以前没注意过的点,加上自己平时也遇到过很多很多,所以想写一篇把所有知道的性能问题全部集合起来,这篇文章我会持续更新。 1.循环使用         平时在访问一个属性的时候效率远比一个固定变量低,如果你的循环估计次数常常大于 5, 假设 xxx.GetLength()方法的值一般大于 5,正常的情况下我们会这么写,比如 for...

风之子磊的博客 2947

内存溢出、内存泄露和性能优化总结

内存溢出内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个Integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最

Chay_Chan的博客 1577

Android性能优化之Bitmap导致的内存溢出

原本计划是按照章节顺序学习《Android开发艺术探索》这本书的,Android性能优化这部分也是本书的最后一章。但是周末的时候,友盟线下反馈的公司项目的一个错误让我不得不提前学习这一块的知识。先看看线下反馈的错误吧: java.lang.OutOfMemoryError:应用程序内存溢出,俗称OOM,是指应用程序在申请内存时,没...

weixin_34290096的博客 1567

Android面试之性能优化

前言 本文是为了面试而写的性能优化。目的不是为了具体的深入而是对于要面试的同学在面试的时候能和面试官说出的性能优化的方面。在面试的时候基本现在每个面试官都会问一些关于性能优化方法的问题。那么该怎么回答呢?面试不同于我们学习新的知识点,要完全学会,要学精,对于面试官这个问题,可以从下面几个方面来回答,ANR,内存溢出,内存抖动,内存泄漏,UI卡顿,冷启动优化等方面来回答。 ANR ANR(Appli...

gxl的博客 3937

Android面试题之性能优化篇

性能优化篇前言性能优化1.如何对 Android 应用进行性能分析2.什么情况下会导致内存泄露3.内存溢出的几点原因4.针对 static 的解决方案5.线程导致内存溢出及解决6.举例几种OOM 异常情况7.如何处理图片过大导致 OOM8.Android 中如何捕获未捕获的异常9. ANR 是什么?怎样避免和解决 ANR(重要)10.多线程间通信和多进程之间通信有什么不同,分别怎么实现?11.Devik 进程,linux 进程,线程的区别12.Android 线程间通信有哪几种方式13.如何合理使用内存?关

计蒙不吃鱼的博客 3063

Android性能——内存溢出(篇一:内存溢出与内存泄露)

第一章内存溢出与内存泄露 一 内存溢出与内存泄露 内存溢出(Out of memory):系统会给每个APP分配内存也就是Heap size值,当APP所需要的内存大于了系统分配的内存,就会造成内存溢出;通俗点就是10L桶只能装10L水,但是你却用来装11L的水,那就有1L的水就会溢出 内存泄漏(Memory leak):当一个对象不在使用了,本应该被垃圾回收器(JVM)回收,但是这个对象由于被其他正在使用的对象所持有,造成无法被回收的结果,通俗点就是系统把一定的内存值A借给程序,但是系统却收不回完.

littlegirlya的专栏 385

android 性能优化 工资,Android面试之性能优化

前言本文是为了面试而写的性能优化。目的不是为了具体的深入而是对于要面试的同学在面试的时候能和面试官说出的性能优化的方面。在面试的时候基本现在每个面试官都会问一些关于性能优化方法的问题。那么该怎么回答呢?面试不同于我们学习新的知识点,要完全学会,要学精,对于面试官这个问题,可以从下面几个方面来回答,ANR,内存溢出,内存抖动,内存泄漏,UI卡顿,冷启动优化等方面来回答。ANRANR(Applicat...

weixin_39631350的博客 145

Android 性能优化之内存优化

内存问题:内存抖动、内存泄露、内存溢出 内存管理机制:Java、Android

xiangxiongfly 1904
上一篇: 如何解决Bug并养成固定良好的解决思绪
下一篇: Android Studio的快捷键总结---文字图片结合
Checkiming
博客等级 码龄10年 38粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值