android开发的app选择图片后闪退

在Android开发过程中,可能会遇到选择图片后应用程序崩溃的情况。这种情况可能会使开发者非常困惑并且浪费很多时间。但是,如果你了解这种崩溃的原因,你就可以快速的解决它。本文将详细介绍为什么会出现选择图片后应用程序崩溃的情况。

在Android中,选择图片是一个很常见的操作,通常我们使用Intent.ACTION_PICK或Intent.ACTION_GET_CONTENT等操作对图片进行选择。然后,我们会在Activity的onActivityResult()方法中获得相关的数据并绑定到UI元素中。这个过程中,很多开发者会遇到或者犯一个错误,就是在选择图片时可能会选择比较大的图片,并且在显示这些图片时只是简单地将它们缩小到ImageView中,但这并不是正确的方式。因为在将图片加载到ImageView时,这个过程是非常耗费资源的,特别是对于较大的图片。在某些情况下,这个过程可能会导致应用程序崩溃。

所以,我们需要注意的是,在加载大图片时,我们应该使用Java中的BitmapFactory类,通过压缩图片来减少内存消耗。我们可以调用Bitmap的静态方法decodeFile(),decodeResource()或者decodeStream()来获取Bitmap对象,通过设置缩放选项options.inSampleSize来对图片进行压缩。inSampleSize的值是一个整数值,用于指定一个子样本大小。如果inSampleSize的值为1,那么我们就获取整个图片。而如果inSampleSize的值为2,那么我们就获取一半的图片,

以此类推。

BitmapFactory.Options options=new BitmapFactory.Options();//设置为true获取原始图片(不加载到内存),false则不同这些必要的信息options.inJustDecodeBounds = true;BitmapFactory.decodeFile(filePath, options);//计算图片取样率options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);//设置位图选项,表示需要加载原始图片到内存中options.inJustDecodeBounds = false;//重新加载图片Bitmap bitmap= BitmapFactory.decodeFile(filePath,options);calculateInSampleSize()是一个计算取样率的方法,它的实现方法如下:private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {final int height = options.outHeight;final int width = options.outWidth;int inSampleSize = 1;//计算压缩比例,如果长宽都大于所需的长度和宽度,则进行压缩操作if (height > reqHeight || width > reqWidth){final int heightRatio = Math.round((float) height / (float) reqHeight);final int widthRatio = Math.round((float) width / (float) reqWidth);//选择长宽压缩比例中较大的一个进行压缩inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;}return inSampleSize;}

此外,在显示大型图片时,最好使用多线程或异步加载将图片显示到ImageView中。

总之,在Android开发中选择图片时,需要注意加载大图片的内存消耗问题,如果不加注意可能会导致应用程序崩溃。所以使用在加载大图片时使用BitmapFactory类和多线程或异步加载的技术是非常必要的,对于避免应用程序崩溃有很大的帮助。

文章来源:android开发的app选择图片后闪退 - 一门APP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode | 226. 翻转二叉树

LeetCode | 226. 翻转二叉树 OJ链接 不为空就翻转&#xff0c;空空就停止翻转左子树的节点给了右子树右子树的节点给了左就完成了翻转 struct TreeNode* invertTree(struct TreeNode* root) {//不为空就进行翻转if(root){//翻转struct TreeNode* tmp root->left;root->…

计算机网络安全问题分析与防护措施研究

计算机网络安全问题分析与防护措施研究 【摘要】在信息技术快速发展的今天&#xff0c;网络对于人类的生活方式影响显著增强&#xff0c;网络技术快速地在社会各个领域普及&#xff0c;使得计算机网络的安全成为一个亟待解决的问题。如何能够保证网络的快速健康发展己成为研究…

数据库之 redis

前言&#xff1a; 就学习爬虫而言&#xff0c;对于三种常见的数据库做个基本了解足以&#xff0c;所以笔记都是浅尝辄止&#xff0c;不会涉及太深入的东西。 redis简介 Redis&#xff08;Remote Dictionary Server &#xff0c;远程字典服务&#xff09; 是一个使用ANSI C编写…

❀My学习Linux命令小记录(12)❀

目录 ❀My学习Linux命令小记录&#xff08;12&#xff09;❀ 46.arp指令 47.tcpdump指令 48.chmod指令 49.chown指令 50.bash调用脚本指令 shell介绍 shell脚本的组成部分 脚本执行方式 检查脚本语法 bash之变量 变量的种类&#xff1a;根据生效的范围不同来区分 …

GO基础之基本数据类型

基本数据类型 整型 整型分为以下两个大类&#xff1a; 按长度分为&#xff1a;int8、int16、int32、int64 对应的无符号整型&#xff1a;uint8、uint16、uint32、uint64 其中&#xff0c;uint8就是我们熟知的byte型&#xff0c;int16对应C语言中的short型&#xff0c;int64对应…

简单可行的SeruatV4的安装方案

目前Seurat的版本从V4升级到了V5&#xff0c;由于一些变化&#xff0c;导致当年取巧&#xff0c;使用获取数据的方法都无法在V5中使用。 建议在操作前重启下Rstudio&#xff08;或更确切的说是R&#xff09;&#xff01;&#xff01;&#xff01; 那么如何确保自己能够安装V4的…

活动回顾|德州仪器嵌入式技术创新发展研讨会(上海站)成功举办,信驰达科技携手TI推动技术创新

2023年11月28日&#xff0c;德州仪器(TI)嵌入式技术创新发展研讨会在上海顺利举办。作为TI中国第三方IDH&#xff0c;深圳市信驰达科技有限公司受邀参加&#xff0c;并设置展位&#xff0c;展出CC2340系列低功耗蓝牙模块及TPMS、蓝牙数字钥匙解决方案&#xff0c;与众多业内伙伴…

Vue框架学习笔记——列表渲染:v-for

文章目录 前文提要代码正文 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 主要学习链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 代码正文 <body><div id"box"><ul><li v-for"(p,index)…

Synchronized关键字的底层原理

Synchronized实现 Synchronized创建的时候一个互斥的对象锁&#xff0c;每次只有一个线程可以获取该锁。 其底层主要是基于Monitor实现的&#xff0c;在对象的对象头中存储了MarkWord存储的就是Monitor的地址。 对象的内存结构 对象在内存中存储主要分为三个部分&#xff1a…

聊一聊大模型 | 京东云技术团队

事情还得从ChatGPT说起。 2022年12月OpenAI发布了自然语言生成模型ChatGPT&#xff0c;一个可以基于用户输入文本自动生成回答的人工智能体。它有着赶超人类的自然对话程度以及逆天的学识。一时间引爆了整个人工智能界&#xff0c;各大巨头也纷纷跟进发布了自家的大模型&#…

Siamese网络与匈牙利算法在目标跟踪中的研究与应用

1. 引言 目标跟踪是计算机视觉领域中的一个重要研究方向&#xff0c;广泛应用于视频监控、智能交通、人机交互等领域。随着深度学习技术的不断发展&#xff0c;Siamese网络和匈牙利算法在目标跟踪领域的应用逐渐受到关注。本文将对Siamese网络与匈牙利算法以及其在目标…

电动车刷卡-CI522方案

Ci522是一颗工作在13.56MHz频率下的非接触式读写芯片&#xff0c;支持读A卡&#xff08;CI523支持读A/B卡&#xff09;&#xff0c;可做智能门锁、电动车NFC一键启动、玩具NFC开锁等应用。为部分要求低成本&#xff0c;PCB小体积的产品提供了可靠的选择。 Ci522与Si522/MFRC52…

IDEA插件MybatisLog Free失效,不打印日志解决

因为此插件是基于mybatis的本地日志打印基础上操作的,所以检查是否配置日志输出版本. 如果使用的是mybatis-plus框架检查是否有下面语句 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 如果使用的是mybatis框架检查是否有下面语…

巧用JAVA自带的API解决日期类问题

文章目录 题目代码优势 题目 特殊日期 代码 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 import java.time.LocalDate; public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代…

Python更改YOLOv5、v7、v8,实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

1. 前提 效果图 不错的链接&#xff1a;YOLOV7训练模型分析 关于map的绘图、loss绘图&#xff0c;可参考&#xff1a;根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图 v5、v8调用val.py&#xff0c;v7调用test.py&#xff08;作用都是一样的&#xff0c;都是…

基于Linux的网络防火墙设计方法

摘要 随着Internet的迅速发展&#xff0c;网络越来越成为了人们日常生活不可或缺的一部分&#xff0c;而随之引出的网络安全问题也越来越突出&#xff0c;成为人们不得不关注的问题。 为了在一个不安全的网际环境中构造出一个相对安全的环境&#xff0c;保证子网环境下的计算机…

javaScript-正则表达式

正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是一种描述字符串规律的表达式&#xff0c;可以迅速地用极简单的方式达到字符串的校验控制。 作用&#xff1a;利用较简短的描述语法完成诸如查找、匹配、替换等功能 如何创建正则表达式: 方法1 直接声明…

行业分析:2023年木炭行业市场需求及发展前景

木炭是一种燃料名称。是木材或木质原料经过不完全燃烧&#xff0c;或者在隔绝空气的条件下热解&#xff0c;所残留的深褐色或黑色多孔固体燃料。木炭产品主要分为白炭、黑炭、活性炭、机制炭等四大类。 木炭是保持木材原来构造和孔内残留焦油的不纯的无定形碳。中国商代的青铜器…

【每日OJ —— 101. 对称二叉树】

每日OJ —— 101. 对称二叉树 1.题目&#xff1a;101. 对称二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;101. 对称二叉树 2.解法 2.1.算法讲解 1.该题是判断二叉树是否对称&#xff0c;关键在于&#xff0c;左子树等于右子树&#xff0c;而所给的…

Pytorch当中squeeze(1)函数和unsqueeze(1)函数的区别及含义

一、squeeze(1&#xff09; 在 PyTorch 中&#xff0c;.squeeze(1) 是用于张量维度操作的方法之一&#xff0c;它的作用是将张量中尺寸为 1 的维度压缩&#xff08;去除&#xff09;掉。 具体来说&#xff0c;如果张量在指定维度&#xff08;这里是维度 1&#xff09;上的尺寸…