总结android日常用到的注意点

安卓调用Opencv库的步骤和注意点 吐槽 最近这周帮一个大四的学长弄他的毕业设计,他的课题是基于安卓环境下的图片合成问题,本来这个蛮简单的,但是他这个两个图片的合成算法是调用opencv的,,,然后就把我各种煎熬,然后按照网上的各种博客来装opencv库,出现了各种问题,然后就一个一个去解决,,,唉头大。希望我的总结可以给别人带来帮助。 Opencv库 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以... 阅读详情

一、 网络访问:
1. httpurlConnection与httpClient优缺点:<1>两者都是kee-alive<2>httpurlConnection默认使用Gzip压缩数据,提升性能,并且简单易用<3>httpClient api复杂
注:httpurlConnection android2.2版本之前不使用,是因为close后会影响线程池导致链接服用失效
2. java包含4中线程池:
<1>newSingeThread:单一线程即每次都只会new一个线程,其他线程处于等待;
<2>newCacheThread:线程可缓存,当第一个线程执行完毕,第二个线程会复用第一个线程,否则会重开线程,不限制线程数,如果线程池长度超过处理需要,可灵活回收空 闲线程,若无可回收,则新建线程。示例代码如下;
<3>newScheduledThread:线程延迟加载,支持定时及周期性任务,可设置线程数;
<4>newFixedThread:可控制线程最大并发数,超出的线程会在队列中等待;
4中线程都是通过Executors.new出来;

二、缓存:
1. 图片缓存:sdcard,内存
关于图片缓存:<1>控制图片大小,可通过固定值,比如1280x800,来算出适配手机的宽高,并向服务器请求url+width=?&heigth=?
\
2. handler消息缓存:handler.obtainMessage(handler.obtainMessage());
3. 使用bufferBufferedInputStream代替inputstream;使用BufferedReader代替reader;
4. 使用Stringbuffer/StringBuilder代替string

三、布局优化:
1. include:包含一个公共布局,如标题布局;
2. viewstub:当gone时不被解析,一般用于错误提示,网络提示;
3. merge:去掉不必要的节点;
4. 使用RelativeLayout代替LinearLayout;

四、sqlite优化:
1. 只查询指定的字段,减少输出量;
2. 少用cursor.getColumnIndex();

五、数据结构:
1. arraylist:根据inde取值,取值更快,有序排列;
2. linkedlist:更占内存,随机插入删除更快;扩容效果高;
3. hashmap,linkedHashmap,hashSet:hash系列查询速率高;
4. android提供了一些速率更高的,如sparseArray,sparseBooleanArray,sparseIntArray,不过key只能是int整型;

六、调优工具:
1. fidder,网络请求包抓取;
2. sdk/tools下hierarchyviewer.bat,可显示布局,优化布局使用;
3. sdk/tools下monitor.bat最新sdk中代替了traceview.bat,性能调优;

七、全局异常获取:
1.主要使用类UncaghtExceptionHandler:处理崩溃问题

     public class CrashHandler implements UncaughtExceptionHandler {

    private static final String TAG = CrashHandler.class.getSimpleName();

    private static CrashHandler instance; // 单例模式

    private Context context; // 程序Context对象
    private Thread.UncaughtExceptionHandler defalutHandler; // 系统默认的UncaughtException处理类

    private CrashHandler() {

    }

    /**
     * 获取CrashHandler实例
     * 
     * @return CrashHandler
     */
    public static CrashHandler getInstance() {
        if (instance == null) {
            synchronized (CrashHandler.class) {
                if (instance == null) {
                    instance = new CrashHandler();
                }
            }
        }

        return instance;
    }

    /**
     * 异常处理初始化
     * 
     * @param context
     */
    public void init(Context context) {
        this.context = context;
        // 获取系统默认的UncaughtException处理器
        defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
        // 设置该CrashHandler为程序的默认处理器
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    /**
     * 当UncaughtException发生时会转入该函数来处理
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        // 自定义错误处理
        boolean res = handleException(ex);
        if (!res && defalutHandler != null) {
            // 如果用户没有处理则让系统默认的异常处理器来处理
            defalutHandler.uncaughtException(thread, ex);

        } else {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                Log.e(TAG, "error : ", e);
            }
            // 退出程序
            // android.os.Process.killProcess(android.os.Process.myPid());
            // System.exit(1);
        }
    }

    /**
     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
     * 
     * @param ex
     * @return true:如果处理了该异常信息;否则返回false.
     */
    private boolean handleException(final Throwable ex) {
        if (ex == null) {
            return false;
        }

        new Thread() {

            @Override
            public void run() {
                Looper.prepare();
                ex.printStackTrace();
                System.out.println("日志输出:" + ex.getMessage());
                Looper.loop();
            }

        }.start();

        /**
         * 可收集错误日志信息到服务器
         */
        return true;
    }

}

八、位运算计算:

     StringBuffer sb = new StringBuffer()
     private String printInt(int i) {
        if (i / 2 != 0 || i % 2 != 0) {
            sb.append(i % 2);
            i = i / 2;
            printInt(i);
        }
        return sb.toString();
    }

//并将结果倒叙排列
安卓SDK独立点9图片制作工具包 在 Android 开发中,点9图片是一种非常实用的图像格式,用于实现界面元素的自适应拉伸。它们之所以被称为“点9”,是因为这些图片通过在边缘定义可拉伸的区域(通常通过1像素宽的黑色线条),来决定图像的哪一部分可以水平或垂直拉伸,哪一部分是固定不变的。这种独特的设计使得点9图片在设计具有可变尺寸的用户界面元素时变得非常有用,如按钮、图标和其他UI组件。点9图片的主要用途包括:适应不同屏幕尺寸:它们允许开发人员设计适应不同屏幕尺寸和分辨率的灵活界面元素。保持图像质量。 阅读详情

相关推荐

vllm运行过程中出现cuda out of memory

将长序列分解为多个小块,每个块分别处理。这样可以减少单次 Prefill 的计算量和显存占用,从而优化 TTFT 和显存使用效率。考虑使用 CPU 卸载(如 --cpu-offload-gb),将部分缓存卸载到 CPU 内存中,扩展 GPU 的虚拟内存。在大语言模型中,当输入序列很长(例如超过 1024 个 Token)时,Prefill 阶段的计算量会非常大。最后增加了enable-chunked-prefill参数和max_num_batched_tokens解决了问题。参数来进一步优化性能。

盛世芳华 3517

Uncaught Exception java.lang.NoClassDefFoundError: Could not initialize class org.apache.jmeter.gui.

问题:运行jmeter的时候,后台报了Uncaught Exception java.lang.NoClassDefFoundError: Could not initialize class org.apache.jmeter.gui.util.MenuFactory. See log file for details. 解决: 只需要进入lib/ext 文件夹内中的ApacheJMeter_m...

qq_30442413的博客 1万+

7.7 数据分析助手:用AI洞察业务数据价值

摘要:AI数据分析助手构建指南 本文介绍了如何构建AI数据分析助手,帮助企业从业务数据中提取价值。系统包含四大核心模块:自然语言理解模块解析用户查询意图,查询规划模块转换为SQL语句,数据可视化模块生成图表,以及洞察生成模块提供深度分析。文章通过销售数据分析助手案例,展示了从数据库准备到自然语言处理的完整实现流程,包括示例代码和系统架构图。该解决方案可降低数据分析门槛,让业务人员直接参与数据探索,提升决策效率。

yonggeit的博客 4093

Crash: 处理UncaughtExcption,捕获未处理异常信息,界面友好提示用户

Crash: 处理UncaughtExcption,友好提示用户,捕获错误信息相信大家在APP使用过程都遇到过,应用程序异常崩溃,屏幕一黑闪退,这种情况称之为Crash。出现的原因是由于程序运行过程中产生了未知异常UncaughtException,当程序发生Crash时,系统会杀死程序,出现闪退,这种情况的用户体验不好,而且开发人员也不能知道用户发生了何种异常。 那么问题来了,发生Crash时我

萧萧北keno的专栏 2325

SNAP实战:Sentinel-1 GRD数据从预处理到后向散射系数生成全流程解析

本文详细解析了Sentinel-1 GRD数据从预处理到后向散射系数生成的全流程,包括辐射定标、噪声处理、地形校正等关键步骤。通过SNAP软件实战操作,帮助用户掌握SAR影像处理技巧,提升数据质量与分析效率,适用于地表变化监测、灾害评估等应用场景。

weixin_29239661的博客 536

低功耗模式下的看门狗使用

最近用国产芯片AT32在做一个低功耗的项目,为了实现低功耗模式下的定时唤醒,我选择的是使用相对比较简单的看门狗来做,下面就分享一下使用过程~ 为了最大限度的降低功耗,我用的是待机模式,先看看几种低功耗模式以及唤醒的区别: 而看门狗AT32提供了两种,分别是独立看门狗(IWDG)和窗口看门狗(WWDG),其区别大概有以下几点: 1、独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效;窗口看门狗由从 APB1 时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常

dc18883988396的博客 3028

如何处理UncaughtException异常

如何处理UncaughtException异常为什么要处理UncaughtException异常怎么处理UncaughtException异常线程很容易被发现,子线程中的异常不易被发现。子线程抛出的异常无法使用传统方法捕获。直接捕获异常可以提高代码的健壮性。使用UncaughtExceptionHandler处理未捕获的异常 为什么要处理UncaughtException异常 在一个项目中,会有很多UncaughtException异常。如果这些异常没有处理,就有可能把异常信息返回给前端,黑客看到这些异常的

papinick的博客 1万+

Python+pytest+requests 自动化测试框架

环境准备 本次选用的是Python+Pytest+requests来搭建自动化框架,需要有 Python 环境(3.x 版本),安装pytest和requests,不会安装的自行去网上搜教程。 关于 Pytest 的基本使用,这里不作讲解,不清楚的可以看我之前的文章。 简单 Demo 我们先创建一个项目,取名api-test,然后在下面创建一个test_api.py的文件 # test_api.py import pytest import requests def test_01():

weixin_42686892的博客 1万+

Android 开发中一些很有用但你不知道的方法

setBackgroundResource(0) 可以移除 View 的背景色 Resources.getSystem().getDisplayMetrics().density 可以不用 Context 也能获取屏幕密度哦 通过重载 ViewGroup 的 dispatchDraw 可以实现一个简单的蒙版效果。 例如下拉刷新时,可以在 contentView 上加一层遮罩。 canv

qq_21763489的博客 1078

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

YOLOv8改进:基于EfficientNetV2均衡缩放网络的特征提取层优化【YOLOv8】

YOLO(You Only Look Once)系列模型以其高效的实时目标检测能力而闻名。YOLOv8作为该系列的最新版本,通过引入改进的网络结构和算法优化,进一步提升了目标检测的性能。然而,YOLOv8在特征提取阶段的网络结构仍有改进的空间。EfficientNetV2是一种基于均衡缩放的卷积神经网络,它通过优化网络的宽度、深度和分辨率来实现高效的特征提取。与之前的EfficientNet版本相比,EfficientNetV2在速度和精度上都有显著提升,尤其在处理复杂目标检测任务时表现尤为突出。

博客 1582

【Android】安Android Studio环境搭建注意点

三、Android(系统)版本即是Platform Version,即Android平台版本。3、安装Android studio,安装时自定义安装目录。2、手动修改安装路径,会导致很多功能需要手动配置,比如安卓虚拟设备AVD无法使用。:设置系统环境变量ANDROID_HOME,值为Android SDK的路径。注意事项:AVD选项页面的镜像文件版本需要和项目中安卓SDK的版本保持一致。步骤2:设置系统环境变量ANDROID_SDK_HOME,值为。SDK版本,指的就是 API Level。

double222222的博客 1703

PowerPMAC配置EtherCAT设备

本文详细介绍了在PowerPMAC IDE环境下配置EtherCAT伺服电机的完整流程。主要内容包括:准备工作(连接硬件和获取ESI文件)、通过ESI管理器加载配置文件、网络扫描识别从站设备、变量映射(定义输入输出位置参数)、激活EtherCAT通讯(验证状态字和实际位置)以及相关参数说明。文章还概述了主站配置的8个方面和从站配置的7个选项,重点说明了PDO映射和变量分配机制,为伺服电机的EtherCAT通信配置提供了系统指导。

mahuliang321的博客 974

安​卓​开​发​注​意​点

ggbb190的专栏 720

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android点九图注意事项

我们知道在安卓开发中,由于安卓机型繁多,屏幕适配是个很常见的问题.在不同的机型下,如果使用同一张图片,那么在大屏幕机型上可能会出现图片变形的情况。那么需要准备多张图片么?这样资源就有点太浪费了。于是这时候出现了Android专用的点九图——Nine-Patch。

Android_yh的博客 2674

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

安卓基础学习 Day03 |常用布局-相对布局

目录写在前面的话一、相对布局(一)概述(二)注意事项(三)常用属性(四)测试二、补充内容 写在前面的话 1、内容参考自B站以及网络 2、内容如果有不对的,希望可以指出或补充。 3、巩固内容 一、相对布局 (一)概述 相对布局(RelativeLayout):也是常用布局之一,可以设置某一个控件相对于包裹它的(父容器)或者是和它一起被包裹的另一个控件(兄弟组件)的位置。 适用于较复杂的布局,主要针对的是线性布局嵌入多层的问题。一般采用 RelativeLayout + LinearLayout的layou

luck_ch09的博客 6051

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android答辩问题,安卓毕业设计答辩(流程、准备、模板及注意事项)

安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,是计算机软件的一种,本篇文章就向大家介绍一下安卓毕业设计答辩时的注意事项,希望对大家在准备安卓毕业设计答辩时有所帮助。一、安卓毕业设计答辩流程1、简要叙述毕业论文的内容叙述中要表述清楚你写这篇论文的构思(提纲),论点、论据,论述方式(方法)。一般约5分钟左右。2、即兴答辩答辩老师会提出2-3个问题,一般会针对论文中涉及的...

weixin_36397509的博客 6966

Android 触摸反馈一些注意的点

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2401_84122016的博客 1118

英雄联盟手游日服下载教程【附安卓下载地址】

大家请耐心看完以下的操作,分为安卓手机下载教程以及IOS苹果手机下载安装教程。 帐号注册方法 需要注册拳头账号 1.下载一个迅游加速器,或者海豚加速器,打开加速器的app,在左上角的搜索框里有拳头账号注册。 2、在这里是可以进行注册的,点击注册网址,然后填写账号和邮箱,在邮箱激活一下就可以使用。 3、打开邮箱是有一封邮件的,点击邮件的中间区域进行激活,在这里可以激活账号,激活之后就可以使用。 提示:注册的时候身份证不要填写未成年的,不然会有时间限制 不想注册的可以去拼多多花钱购买一个就可以了 温馨提示: 出

weixin_52045447的博客 6169

APP测试中IOS和Android的区别,有哪些注意点?

​ Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的。还有新闻类的应用。 ​

apex_eixl的博客 1010

android13系统适配注意点

由于用户很难将位置信息权限与 Wi-Fi 功能相关联,因此 Android 13(API 级别 33)在 NEARBY_DEVICES 权限组中引入了运行时权限,适用于管理设备与附近 Wi-Fi 接入点连接情况的应用。如果您的应用以 Android 13 为目标平台,并且在后台运行时需要访问身体传感器信息,那么除了现有的 BODY_SENSORS 权限外,您还必须声明新的 BODY_SENSORS_BACKGROUND 权限。设备所有者应用、资料所有者应用、系统应用。

weixin_39788742的博客 895

安卓系统某些版本一些需要注意变化

蓝牙 在安卓10以上,蓝牙扫描需要更精确的位置权限。 即:从仅仅ACCESS_COARSE_LOCATION到ACCESS_FINE_LOCATION 广播 安卓8以上,无法接收隐式发送的静态注册广播 即:从 Intent intent = new Intent("com.example.broadcasttest.MyRecriver"); sendBroadcast(intent); 到 Intent intent = new Intent(); intent.setComponen.

nameless69的博客 1037

在Android Studio中要注意的几个地方,和导入项目注意点

注意点: 一.在Android Studio中的layout(加载的页面)文件名要用小写的字母。 二.在android的java文件中写的方法要使用public的方法。private的方法在虚拟机会报错。 三.打印日志:Toast.makeText(MainActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();记得后面一定要加show(),不加的话是...

sxlfhzljb的博客 1243

Android studio安卓虚拟机无法启动

Android studio安卓虚拟机无法启动-2022年10月

burn_hep的博客 2511

配置Qt Android安卓环境

本文是一份Qt Creator 安卓开发环境搭建的图文教程,面向 Windows 系统用户,完整覆盖从 Qt 安装到模拟器成功运行的全流程,同时针对性解决国内用户常见的配置、报错问题。

fojoker的博客 666
上一篇: 2015.6项目经历总结
下一篇: 安装JDK1.8.0_66的坑
菲仔
博客等级 码龄16年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值