
Android开发
文章平均质量分 58
hipeboy
计划赶不上变化,但不计划永远没有变化!
今天不学习,明天变垃圾!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Activity的launchMode
1、standard: (备注:standard是系统默认的启动模式。)标准启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志, 则这个Activity与启动他的Activity在同一个Task中,如果设置了Activity请参考上面FLAG_ACTIVITY_NEW_TASK的详细说明,"launchMode"设置为"standard"的Activity可以被实例化多次, 可以原创 2021-05-04 21:29:44 · 291 阅读 · 0 评论 -
常用的adb命令: Android debug bridge
显示系统中全部Android平台:android list targets显示系统中全部AVD(模拟器)android list avd创建AVD(模拟器):android create avd --name 名称 --target 平台编号启动模拟器:emulator -avd 名称 -sdcard ~/名称.img (-skin 1280x800)删除AVD(模拟器):android delete avd --name 名称创建SDCard:mksdcard 1024M ~/名称.原创 2021-05-04 21:19:17 · 362 阅读 · 0 评论 -
Handler post中run()方法与handleMessage()方法的调用原理
在使用Handler时可能遇到一些疑问,handler.post(Runnable r)中的run()方法与handleMessage()的调用Handler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } });原创 2021-03-12 11:36:19 · 972 阅读 · 0 评论 -
Handler与Looper引起的故事
先看看一段代码:new Thread(new Runnable() { public void run() { Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { Toast.ma原创 2021-03-10 19:40:35 · 154 阅读 · 0 评论 -
Android 使用procmem工具查看详细内存使用情况
1.procmem 工具代码路径system/extras/procmem2.1编译生成路径out/target/product/xxx/system/xbin2.2procmem 工具下载procmen工具下载3.使用方法adb rootadb remoiuntadb push procmem system/xbin使用adb shellxxx:/ # procmem 14975procmem 介绍procmem:针对每一个进程具体分析就要使用procmem工具了。proc原创 2021-03-08 11:29:14 · 864 阅读 · 0 评论 -
android adb常用查看内存信息的命令
meminfo: basic memory status-adb shell cat proc/meminfo – 内存系统信息-adb shell cat proc/pid/maps – 指定进程内存地址映射-adb shell cat proc/pid/smaps – 指定进程内存详细使用信息?procrank info: all process memory status-adb shell procrank – VSS. RSS. PSS. USS 信息-adb shell pr原创 2021-03-07 13:16:04 · 2334 阅读 · 0 评论 -
android camera2获取平台人脸识别坐标步骤详解
人脸识别技术已经很广泛了,那么我们如何在我们的应用中集成人脸识别呢?Google平台自带有人脸识别功能,下面我们看看如何实现://人脸识别当然得打开摄像头 cManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); //open camera cManager.openCamera(cId, getCDeviceOpenCallback(), getCHandler()); /** * 初始化并获取相机开原创 2021-02-23 14:01:11 · 1594 阅读 · 1 评论 -
Android 面试与开发中常遇到的算法集
1,冒泡排序;2,选择排序;3,快速排序;4,归并排序;5,插入排序;冒泡排序 比较两个元素、交换它们的位置 算法原理:冒泡排序算法的运作如下:(从后往前)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。public void bubbleSort() { int原创 2021-02-23 11:36:47 · 337 阅读 · 0 评论 -
kotlin中 run、apply、let、also、with的用法和区别
run 、 apply 、 let 、 also 和 with 五个函数均位于 kotlin 包下的 Standard 文件中,其含义和用法比较相似,现分别介绍如下。run用法1函数定义:public inline fun run(block: () -> R): R = block()功能:调用run函数块。返回值为函数块最后一行,或者指定return表达式。示例:val a = run {println("run")return@run 3}println(a)运行结果:原创 2021-02-03 23:26:41 · 3263 阅读 · 0 评论 -
Android Kotlin中调用Looper的quit方法和quitSafely方法
在写代码的过程中,可能会遇到如下情况: private fun stopBackgroundThread() { backgroundThread?.quitSafely() try { backgroundThread?.join() backgroundThread = null backgroundHandler = null } catch (e: InterruptedExce原创 2021-02-03 23:18:13 · 611 阅读 · 1 评论 -
android JNI动态注册的相关方案
在JNI开发的时候可能会遇到关于动态注册的方式,java上层的调用和静态方式是相同的,关键是native层的调用有所不同,主要关键在于三个地方:1, 定义调用的JNINativeMethod2, 定义调用挂钩的函数3, 实现JNI_OnLoad函数JNI_OnLoad是java jni技术的一个实现,每次java层加载System.loadLibrary之后,自动会查找改库一个叫JNI_OnLoad的函数,动态注册的时候,cpp可以通过实现JNI_OnLoad而完成jni的动态注册。1,建原创 2020-12-28 19:42:55 · 239 阅读 · 0 评论 -
Android.mk 中 ifeq ifneq 的普通与特殊用法详解
(1)ifeq的的常用方法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif ifneq ($(变量名), 变量值 ) ........ else ifneq ($(..), ..) ......... else ......... endif(2)最近在学习Andr原创 2020-12-16 10:41:14 · 7945 阅读 · 0 评论 -
Java & Android 中常见的线程池使用方法及案例
先看看线程池的源码解读:package java.util.concurrent;import java.util.*;import java.util.concurrent.atomic.AtomicInteger;import java.security.AccessControlContext;import java.security.AccessController;import java.security.PrivilegedAction;import java.security.P原创 2020-12-14 13:25:22 · 465 阅读 · 0 评论 -
Android UID 和 PID
UID:在 Android 上,一个 UID 标识一个应用程序。应用程序在安装时被分配 UID,应用程序在设备上的存续期间内, UID 保持不变。在Linux中 UID 是用户的ID,由于Android系统设计之初是单用户系统,UID 被赋予了新的使命,数据共享。不同的程序如果要相互访问,只能是UID相同才可以,这使得共享数据具有了一定的安全性。(不同的程序,还需要拥有相同的签名,而每个公司或开发者的签名是唯一的)PID: PID即进程ID,一个应用里可以有多个PID。在Android系统中一般不会把已经原创 2020-11-20 11:22:23 · 692 阅读 · 0 评论 -
Android中m、mm、mmm、mma、mmma的区别
m:编译整个安卓系统makes from the top of the treemm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找最近的Android.mk文件。builds all of the moudles in the current directorymma:当前目录新增或删除文件后,可以用mma重新编译。mmm:编译指定路径下的模块,指定的路径下面需要有Android.mk这个makefile文件builds all of the原创 2020-11-16 14:12:04 · 14405 阅读 · 0 评论 -
Android.mk编译 ----预编译详解
目前常用到的Android.mk编译目标, 包括编译包、二进制文件、预编译。1.常用编译目标BUILD_PACKAGE(既可以编apk,也可以编资源包文件,但是需要指定LOCAL_EXPORT_PACKAGE_RESOURCES:=true)BUILD_JAVA_LIBRARY(java共享库)BUILD_STATIC_JAVA_LIBRARY(java静态库)BUILD_EXECUTABLE(执行文件)BUILD_SHARED_LIBRARY(native共享库)BUILD_STATIC_L原创 2020-11-06 16:00:58 · 2089 阅读 · 3 评论 -
Android 一个应用多个桌面图标
在开发过程中,可能会遇到需要几个应用图标的情况。理解android.intent.action.MAIN 与 android.intent.category.LAUNCHER:在Android 应用程序开发过程中,Activity入口会增加:android.intent.action.MAIN // 决定应用程序最先启动的Activityandroid.intent.category.LAUNCHER // 决定应用程序是否显示在程序列表里如果只有一个activity的应用程序只声明了 and原创 2020-10-14 09:48:51 · 1952 阅读 · 1 评论 -
Android SELinux 权限处理
SELinux 权限修改,我这里罗列出来了3种方案,可以选择解决:1.adb在线修改seLinux该方法适合调试的时候使用,并没有实际解决权限问题Enforcing(表示已打开),Permissive(表示已关闭)getenforce; //获取当前seLinux状态setenforce 1; //打开seLinuxsetenforce 0; //关闭seLinux2.从kernel中彻底关闭修改LINUX/android/kernel/arch/arm64/configs/xx原创 2020-10-09 10:32:12 · 793 阅读 · 0 评论 -
android中自定义View Canvas.drawCircle()方法的理解
功能说明该方法用于在画布上绘制圆形,通过指定圆形圆心的坐标和半径来实现。该方法是绘制圆形的主要方法,同时也可以通过设置画笔的空心效果来绘制空心的圆形。基本语法public void drawCircle (float cx, float cy, float radius, Paint paint)参数说明cx:圆心的x坐标。cy:圆心的y坐标。radius:圆的半径。paint:绘制时所使用的画笔。实例演示下面通过代码来演示如何在画布上绘制圆形。 @Override pro原创 2020-09-27 10:37:08 · 626 阅读 · 0 评论 -
Android 获取电池电量(广播获取和BatteryManager获取和执行命令获取)
方法一:注册广播(被动接受)IntentFilter filter2 = new IntentFilter();filter2.addAction(Intent.ACTION_BATTERY_CHANGED);registerReceiver(filter2,receiver);接收到广播后,用getIntExtra("level")和getIntExtra("scale")获得相应值intent.getIntExtra("level", 0); ///电池剩余电量intent.getIn原创 2020-09-07 15:18:52 · 9861 阅读 · 1 评论 -
android 深入学习中遇到Bn 和Bp时如何区别
最近在研究surfaceflinger,真心被里面的类名折腾惨了。Bnn 就是native,这是一个怎样的类? 我们继承它的原因是为了实现一个接口,具体点说就是一个BnXXX对应一个IXXX。比如BnSurfaceComposer 对应 ISurfaceComposerI 其实就是interface(接口)的意思。class SurfaceFlinger : public BnSurfaceComposer{…}SF inherit BnSC,let’s see the BnSC:class原创 2020-09-05 10:25:27 · 823 阅读 · 0 评论 -
Android 中与Java内存结构及堆栈区别
一、认识Android储存结构对于Android来说,存储主要分为三个部分:内存、内部存储以及外部存储,详细介绍如下:(1)内存存储RAM(Random Access Memory)内存与PC的内存是一样的,是用来运行程序,不能用来永久存储数据,手机一旦关机,在内存中的所有数据都将会丢失,内存也是现在人类制造的所有电子设备所必需拥有的。(2)内部存储ROM(Read Only Memory)就是就相当于是PC中的硬盘的角色。用于存储Andoid 设备的操作系统和应用程序的存储介质。也就是说,And原创 2020-08-05 11:07:07 · 307 阅读 · 0 评论 -
Android NDK Jni 开发语言使用C和C++的区别
由于Android官方NDK例子大多使用C语言编写,所以当我们想用C++进行开发时,会出现种种错误。下面简单说说几点不同之处,代码中有部分不同之处:1.先来一个用C写的例子:(1)hello.c文件。在C中没有引用,传递的env是个两级指针,用(*env)->调用方法且方法中要传入env. #include <jni.h> jstring Java_com_example_Hello_hello(JNIEnv* env, jobject thiz) { return原创 2020-07-30 14:41:48 · 1485 阅读 · 0 评论 -
android NDK 与 JNI 的关系以及使用方法
NDKNDK的全拼是:Native Develop Kit。那我们先来看下Android NDK官网是对NDK怎么解释的:Android NDK 是一套允许您使用原生代码语言(例如C和C++) 实现部分应用的工具集。在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库。简单的来说:Android NDK 就是一套工具集合,允许你使用C/C++语言来实现应用程序的部分功能。NDK还是有很大的价值的:1、在平台之间移植其应用2、重复使用现在库,或者提供其自己的库重复使用3、在某些情况下提原创 2020-07-30 14:26:51 · 625 阅读 · 0 评论 -
Android 使用adb shell 查看和修改电池信息
1、获取电池信息$ adb shell dumpsys battery$ adb shell dumpsys batteryCurrent Battery Service state:AC powered: false //false表示没使用AC电源USB powered: true //true表示使用USB电源Wireless powered: false //false表示没使用无线电源status: 2 //2表示电池正在充原创 2020-07-10 08:58:35 · 8093 阅读 · 0 评论 -
Android 屏幕旋转使用OrientationEventListener实时监听
在开发Camera的时候,总是会遇到一些旋转效果,因为camera在AndroidMenifest.xml中设置android:screenOrientation=“portrait”,所以需要使用一些特别的方式监听手机的旋转角度:OrientationEventListener 的监听不只是判断屏幕旋转角度0,90,180,270 四个角度,还可以实时获取每一个角度的变化。使用方法:(1)创建一个类继承OrientationEventListener(2)开启和关闭监听可以在 activity原创 2020-07-06 09:50:19 · 5062 阅读 · 2 评论 -
Android Camera 屏蔽下拉框和导航栏的方法
在开发过程中,有时候可能需要防呆的功能,防止用户在使用过程中误点返回键,HOME键,下拉框等之类的。接下来我们需要屏蔽这些按键,先看看代码: /** * 隐藏虚拟键 */ public static void hideNavigation(Activity context) { if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) { Logger.get().原创 2020-07-01 19:54:22 · 458 阅读 · 0 评论 -
Android 笔试题整理
基础篇:1、请描述下Activity的生命周期,说明下出现的条件和顺序。按照顺序分别是:onCreate(),onStart(),onRestart(),onResume(),onPause(),onStop(),onDestory();完整生命周期:一个activity从出现到消失,对应的周期方法是从onCreate()到onDestory();可见生命周期:当activity处于用户可见状态,将多次执行从onStart()到onStop();前景生命周期:当activity可以与用户交互时,将原创 2020-06-23 16:50:49 · 918 阅读 · 0 评论 -
Android & Java 反射基本知识讲解(二)
获取 Class 的成员一个类的成员包括属性(有人翻译为字段或者域)、方法。对应到 Class 中就是 Field、Method、Constructor。获取 Filed获取指定名字的属性有 2 个 APIpublic Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException;publ原创 2020-06-16 10:00:29 · 496 阅读 · 0 评论 -
Android & Java 反射基本知识讲解
反射的原理反射大家用起来很方便,由于性能其实也比较不错了,因此用得挺广的,我们通常这么用反射Method method = XXX.class.getDeclaredMethod(xx,xx);method.invoke(target,params)不过这里我不准备用大量的代码来描述其原理,而是讲几个关键的东西,然后将他们串起来获取Method要调用首先要获取Method,而获取Method的逻辑是通过Class这个类来的,而关键的几个方法和属性如下:-------Class.java---原创 2020-06-11 16:02:57 · 246 阅读 · 0 评论 -
Android && Java 8种数据类型大小
Android 与 Java一样,Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。基本类型大小取值范围装箱基本类型int4个字节-2^31 ~ 2^31-1Integerchar2个字节Characterbyte1个字节-2^7 ~ 2^7-1Byteshort2个字节-2^15 ~ 2^15-1Shortlong8个字节-2^63 ~ 2^63-1Longfloat原创 2020-06-10 11:12:17 · 1255 阅读 · 0 评论 -
Android Context 详细讲解
抛出一个问题:Activity mActivity =new Activity() 成立吗?作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明。Android程序不像Java程序一样,随便创建一个类,写个main()方法就能运行,Android应用模型是基于组件的应用设计模式,组件的运行要有一个完整的Android工程环境,在这个环境下,A原创 2020-06-02 10:30:30 · 754 阅读 · 0 评论 -
Android Camera2 相机拍照流程详解
实现特点实现自动对焦选择性正常触发闪光灯flash复用CaptureRequest.Builder, 参数完全一致拍照注意事项讲解代码片段详解流程按照常规方式打开预览设置好相应的全局变量:CameraDevice的cameraDeviceCameraCaptureSession的mPreviewSessionCaptureRequest.Builder的captureRequestBuilderImageReader的imageReader等定义一个类似takePictur原创 2020-05-28 09:32:08 · 2897 阅读 · 0 评论 -
Android学习——自定义布局,参数LayoutParams
有时候我们需要在代码中动态的改变一个组件的宽高等属性来满足我们的需求, 例如: app中每个界面在请求网络后获取到了空数据, 这个时候我们就要显示相应的布局, 但是如果要显示不同的空布局, 那么就不能简单地写到父类布局中了,应该有子类自己来实现;1.第一种情况: 改变已有布局文件某个组件的宽高先举个例子:TextView text = (TextView) findViewById(R.id.text);RelativeLayout.LayoutParams params = (RelativeLa原创 2020-05-23 14:27:11 · 1019 阅读 · 0 评论 -
android camera内存泄露定位
1简介1.1目的通过一个非常典型的内存泄露实例,描述内存泄露问题的定位和解决全过程。1.2内存分析脚本CameraDrv主要关注mediaserver进程、mm-qcamera-daemon进程对应的内存,我们可以通过下面的2个脚本来查找比较严重的内存泄露。该脚本实时输出当前进程占用的内存情况,其中,我们主要关注RSS的占用:RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)另外,还需要关注ION申请的内存释放情况,暂不详述,可以参考:https://l原创 2020-05-15 13:59:02 · 1510 阅读 · 0 评论 -
Android Camera autofocus基本概念详解
Camera的对焦模式:FOCUS_MODE_AUTO自动对焦模式,应用需要调用autoFocus(AutoFocusCallback)开始对焦,只会对焦一次,对焦成功会有回调。FOCUS_MODE_INFINITY无穷对焦模式,应用很少,不能调用autoFocus(AutoFocusCallback)方法。FOCUS_MODE_MACRO特写镜头对焦模式,应用需要调用autoFocus(AutoFocusCallback)开始对焦FOCUS_MODE_FIXED固定焦点模式,焦点不可调用时原创 2020-05-11 09:42:13 · 3720 阅读 · 0 评论 -
Camera HDR拍照基本概念
HDR 拍照原理:(High Dynamic Range Imaging)高动态范围成像,是用来实现比普通数字图像技术更大曝光动态范围(即更大的明暗差别)的一组技术。高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。现在一般的数码相机和手机中都实现这种拍照模式。适合场景:比较适合在阴暗变化明显的场景下使用,这样能使明处的景物不致过曝,而使得暗处的景物不致欠曝。譬如逆光环境下拍人物,可以将人物和环境都能拍清晰。或者说能将处在暗处的景物拍摄出来的细节表现得更加充分原创 2020-05-11 09:38:29 · 1777 阅读 · 0 评论 -
Camera2 APP Flash 打闪流程及原理分析
Camera Flash打闪流程梳理Flash打闪的条件有两个一个是AE_Mode 一个是Flash Mode两个参数决定Flash打闪的过程。Flash mode有四个状态 AUTO OFF ON TORCH1 AUTO 模式是在AE状态满足RequireFlash 状态时,在Capture请求过程中会进行打闪。Flash Mode 为Flash_Mode_SINGLE,对应的AE_MODE为ON_AUTO_Flash2 ON 状态时拍照时就会打闪,需要才Capture请求中代码Flash Mo原创 2020-05-11 09:16:41 · 6006 阅读 · 3 评论 -
Camera常见输出格式简介
Camera 常见的数据输出格式有:Rawdata 格式、YUV 格式、RGB 格式。RGB 格式:采用这种编码方法,每种颜色都可用三个变量来表示红色、绿色以及蓝色的强度。每一个像素有三原色 R 红色、G 绿色、B 蓝色组成。YUV 格式:其中“Y”表示明亮度(Luminance 或 Luma),就是灰阶值;而“U”和“V”表示色度(Chrominance 或 Chroma),是描述影像色彩及...原创 2020-05-07 17:10:30 · 4153 阅读 · 0 评论 -
高通cameraHAL调用开启预览
1,在Qcamera2hwi.cpp中的QCamera2HardwareInterface::startPreview()函数中调用startChannel(QCAMERA_CH_TYPE_PREVIEW);2,进入QCamera2HardwareInterface::startChannel(qcamera_ch_type_enum_t ch_type)调用m_channels[ch_type...原创 2020-04-26 10:15:05 · 486 阅读 · 0 评论