android开发
文章平均质量分 66
双刃剑客
双刃
展开
-
DroidPlugin代码分析
https://blog.csdn.net/turkeycock/category_6723603.html转载 2023-02-22 11:44:54 · 490 阅读 · 1 评论 -
Android插件化原理解析——概要
就拿Activity生命周期的管理来说,DL的代理方式就像是牵线木偶,插件只不过是操纵傀儡而已;而DroidPlugin则是借尸还魂,插件是有血有肉的系统管理的真正组件;有的方案选择独立资源,不同插件管理自己的资源。类的加载可以使用Java的ClassLoader机制,但是对于Android来说,并不是说类加载进来就可以用了,很多组件都是有“生命”的;因此对于这些有血有肉的类,必须给它们注入活力,也就是所谓的。接下来的一系列文章将以DroidPlugin为例讲解插件框架的原理,揭开插件化的神秘面纱;转载 2023-02-15 10:56:13 · 455 阅读 · 0 评论 -
JNI内存泄露JNI ERROR (app bug): local reference table overflow (max=512)
native method 调用 DeleteLocalRef() 释放某个 JNI Local Reference 时,首先通过线程堆栈中的记录着 Local Reference 表的内存位置的指针定位相应的 Local Reference 在 Local Ref 表中的位置,然后从 Local Ref 表中删除该 Local Reference,也就取消了对相应 Java 对象的引用(Ref count 减 1)。4.GetByteArrayElements和GetStringUTFChars。转载 2022-12-13 19:03:49 · 1089 阅读 · 0 评论 -
Android JNI 调用时的异常处理
异常我们已经很熟悉了,空指针、数组越界等等,在Java中,当抛出一个异常,虚拟机会停止执行代码块并进入调用栈反向检查能处理特定异常的异常处理程序代码块,虚拟机清除异常并将控制权交给异常处理程序。而JNI不同,JNI没有像Java一样有try…catch…final这样的异常处理机制,面且在本地代码中调用某个JNI接口时如果发生了异常,后续的本地代码不会立即停止执行,而会继续往下执行后面的代码,这就要求开发人员在异常发生后显式地实现异常处理。转载 2022-11-08 16:23:33 · 542 阅读 · 0 评论 -
访问数组(JNI)
如果你没有一个预先分配的 C 缓冲区,并且原始数组长度未定,而本地代码又不想在获取数组元素的指针时阻塞的话,使用 Get/ReleasePrimitiveArrayCritical 函数对。对于少量的、固定大小的数组,Get/SetArrayRegion是最好的选择,因为C缓冲区可以在Stack(栈)上被很快地分配,而且复制少量数组元素的代价是很小的。JNI支持一系列的Get/ReleaseArrayElements 函数,这些函数允许本地代码获取一个指向基本类型数组的元素的指针。转载 2022-11-08 14:14:24 · 575 阅读 · 0 评论 -
竟然有如此好用的读Android源码利器
最后,如果你之前不了解这个网站,或者之前了解过一些其他类似的网站。推荐一个可以在线搜索Android源代码的网站cs.android.com。它是由Google开发的一款可帮助开发者查看实际使用的 Android 源代码的工具。我们通过历史记录可以很了解到为什么Google引入这个机制,以及它能干什么。通过学习google大神的修改记录,我们也能得到很大的提升。我们可以看到在ViewRootImpl.java 的scheduleTraversals()方法中调用了postSyncBarrier()方法。转载 2022-11-07 14:22:36 · 878 阅读 · 0 评论 -
Android NDK 开发中正确释放 JNI 对象
如果在 C++ 创建子线程,通过 AttachCurrentThread 获取到 JNIEnv,调用 FindClass 是会报错的,通常而言,如果需要 FindClass ,尽量在 JNI_OnLoad 去创建一个全局的变量。而 GetStringRegion 和 GetByteArrayRegion 是我们自己分配好内存,然后把指针传给jni,jni往指针写入数据,所以不需要jni去释放内存,但是我们自己分配的空间不需要使用后必须释放。错误❌:不能在 Release 之后使用,会导致野指针。转载 2022-11-01 11:44:52 · 1246 阅读 · 0 评论 -
Android onLayout()
Called from layout when this view should assign a size and position to each of its children onLayout()方法的注释就是安排自己的子View的位置,我们继承View的时候好像很少用到这个玩意。因为只是写一个控件根本不会存在子View的问题。 接手别人的代码有个FlowLayout,搜索的时候出现历史记录的类似的View,但是换行的时候会出现问题。所以觉得可以自己搞个试试。 ...转载 2022-04-18 23:39:44 · 821 阅读 · 0 评论 -
NestedScrollView 嵌套RecyclerView 分页加载无效(一次性加载)
<android.support.v4.widget.NestedScrollViewandroid:id="@+id/nested_scroll_view"android:layout_width="match_parent"android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android.原创 2022-04-02 16:41:21 · 1427 阅读 · 2 评论 -
Android开发折叠列表BaseNodeAdapter的使用
Android项目开发过程中,经常会有多级列表的需求,今天分享一下简单好用的BaseNodeAdapter,利用此适配器可实现效果先看一下最终效果将此适配器集成至项目1.在项目的根目录的build.gradle文件中配置远程仓库allprojects { repositories { ... maven { url "https://jitpack.io" } }}2.在需要使用该功能的module中添加依赖,版本号可用(3.0.4)...转载 2022-03-18 10:13:03 · 3063 阅读 · 1 评论 -
Android自定义控件-总结
学习的博客:自定义View系列原创 2021-12-04 12:21:38 · 218 阅读 · 0 评论 -
Android 圆角边框RoundRect原理
绘制圆角矩形的方法/** * Draw the specified round-rect using the specified paint. The roundrect will be filled or * framed based on the Style in the paint. * * @param rect The rectangular bounds of the roundRect to be drawn * @param rx T...转载 2022-03-08 09:35:47 · 4752 阅读 · 0 评论 -
ConstraintLayout--控件边界重叠的解决思路
例如水平向右的两控件,左边的控件要覆盖一部分到右边控件。<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/two_situation_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="ce.原创 2022-03-03 16:20:34 · 1794 阅读 · 0 评论 -
Android 代码动态布局 LayoutParams 使用
先来看一个简单的布局,先用xml写<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@and转载 2022-03-02 15:19:10 · 3141 阅读 · 0 评论 -
kotlin中companion object关键字
转:kotlin中object和companion object关键字_鸿鹄的博客-CSDN博客_companion object1.2 companion objectcompanion object 修饰为伴生对象,伴生对象在类中只能存在一个,类似于java中的静态方法 Java 中使用类访问静态成员,静态方法。companion object { private val TAG = "DemoManager" fun b() { Log.e(TAG,"转载 2022-02-17 11:44:36 · 1066 阅读 · 0 评论 -
Kotlin (一) 复合符号( ‘?.‘ ‘?:‘ ‘as?‘ ‘?‘ )--都与null有关
一、概述项目中慢慢开始,写一些简单的kotlin类了,挺方便的一个语言,借鉴了不少脚本语言的特点。刚开始用,有些点经常要翻越,特别记录下。二、常用的几个复合符号《Kotlin 实战》小人系列,的这本书里 画的图很清晰了,我又重画了一遍。2.1、 ?.安全调用符2.2、 ?:2.3、as? as强制转换2.4、!!2.5、?...转载 2022-02-16 10:45:54 · 218 阅读 · 0 评论 -
java lambda 高阶函数_一文弄懂 kotlin lambda与高阶函数
转:java lambda 高阶函数_一文弄懂 kotlin lambda与高阶函数_weixin_39780784的博客-CSDN博客转载 2022-02-14 11:22:22 · 115 阅读 · 0 评论 -
Android onSaveInstanceState()、onRestoreInstanceState()保存和恢复被系统销毁的数据
Android系统的回收机制会在未经用户主动操作的情况下销毁activity,而为了避免系统回收activity导致数据丢失,Android为我们提供了onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle savedInstanceState)用于保存和恢复数据。一、onSaveInstanceState(Bundle outState)在什么时机会被调用呢?答案是当activity有可能被系统回收的情况下,而且是在on转载 2022-01-26 11:39:22 · 903 阅读 · 0 评论 -
一篇文章搞懂 Activity 启动模式
本文大部分翻译自 《Android “launchMode” (Visualized)》, 并结合自己的理解在 SingleInstance 中添加了补充内容启动模式 是很重要的一块知识点,每位安卓开发都应该了解它是如何运作的。大部分的开发者(包括我自己)认为我们已经知道了如何来使用 启动模式。但是其实我们错了。不仅仅是知道将 Activity 设置为 SingleTask 来防止重复实例化就足够了,虽然大部分情况下这已经解决了我们的业务需求。但是我们真的了解当我们将一个 Activity 设置为 .转载 2022-01-25 14:42:06 · 114 阅读 · 0 评论 -
BRVAH官方使用指南(持续更新)--BaseRecyclerViewAdapterHelper
官方网站:www.recyclerview.orgBRVAH是一个强大的RecyclerAdapter框架,它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,获得了9000多star,非常感谢大家的使用以及反馈。本篇为BRVAH的使用指南以及包含常见问题会第一时间更新最新的使用方法。最新版本请转载 2021-12-28 15:38:08 · 1401 阅读 · 0 评论 -
Android 简单SlidingTabLayout的用法
FlycoTabLayoutgithub:GitHub - H07000223/FlycoTabLayout: An Android TabLayout LibSlidingTabLayout的用法1、导入Gradle依赖implementation 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'2、布局布局采用SlidingTabLayout和ViewPager 配合使用,在ViewPager中添加fragment,从而实现转载 2021-12-28 10:45:05 · 1919 阅读 · 0 评论 -
SmartRefreshLayout基本使用
SmartRefreshLayout 的 github地址:https://github.com/scwang90/SmartRefreshLayout介绍一个智能下拉刷新、上拉加载框架, 扩展性强.先上效果图1. 导入依赖app下的build.gradle加入 // 下拉刷新,上拉加载 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.3' // 没有使用特殊Heade..转载 2021-12-28 10:26:33 · 1448 阅读 · 0 评论 -
1.2Android主题、样式
本篇文章将介绍Android项目中主题样式的定义和使用,后面会介绍实际 app 中改变主题或使用夜间模式的功能是如何实现的。样式及主题简介样式样式是给 View 或 Window 指定外观和格式的属性集合。样式能够指定如高、边距、字体颜色、字体尺寸、背景颜色等属性。样式被定义在一个与布局 XML 文件分开的XML资源文件中。 Android 中的样式与 Web 设计中的层叠式样表类似,允许与内容分开设计。没有使用样式的 view : <TextView android:i转载 2021-12-20 17:41:02 · 257 阅读 · 0 评论 -
CoordinatorLayout 完全解析
一、CoordinatorLayout 的作用CoordinatorLayout 作为一个 “super-powered FrameLayout”,主要有以下两个作用:作为顶层布局; 作为协调子 View 之间交互的容器。使用 CoordinatorLayout 需要在 build.gradle 加入:compile 'com.android.support:design:25.1.0'二、CoordinatorLayout 与 FloatingActionButton2.1 F转载 2021-12-16 17:59:30 · 3272 阅读 · 0 评论 -
Kotlin知识归纳(五) —— Lambda
前序在Kotlin中,函数作为一等公民存在,函数可以像值一样被传递。lambda就是将一小段代码封装成匿名函数,以参数值的方式传递到函数中,供函数使用。初识lambda在Java8之前,当外部需要设置一个类中某种事件的处理逻辑时,往往需要定义一个接口(类),并创建其匿名实例作为参数,具体的处理逻辑存放到某个对应的方法中来实现:mName.setOnClickListener(new View.OnClickListener() { @Override ...转载 2021-12-15 11:56:25 · 3363 阅读 · 0 评论 -
Kotlin之匿名内部类(object: xxxx)
1.常规的方式实现匿名内部类,对象表达式:window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { // ... } override fun mouseEntered(e: MouseEvent) { // ... }})具体例子如下:private fun setAnimation() {.转载 2021-12-14 10:04:16 · 2114 阅读 · 0 评论 -
Kotlin入门,一篇文章就够了
Android为啥要从Java转向KotlinKotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。苹果公司已经在用Swift语言替代Object-C语言,Google也找到了替代Java的语言,也就是JetBrains公司(Android Studio也是用该公司的Intelli J改的)主推的Kotlin。现在将kotlin作为了编写Android的官方语言,而后会有越来越多的项目使用Kot.转载 2021-12-09 17:10:17 · 3829 阅读 · 0 评论 -
Kotlin中@JvmOverloads 注解
使用TextView的过程中,有时候会需要将一串文本中的部分文字做特别的显示效果处理,比如加粗、改变颜色、加着重标识、超链接等等,我们可以通过多个TextView拼凑来实现,但如果需要特殊处理的内容在整个文本的中间,用多个TextView拼凑实在是太麻烦了,Android提供的SpannableString类能够很好地解决这个问题,SpannableString结合下面各种以Span结尾的类可以做出丰富多样的显示效果。 这里重点要理解的是setSpan方法:第一个参数对应的是一个相应的Sp...转载 2021-12-07 14:59:54 · 2121 阅读 · 0 评论 -
Bitmap too large to be uploaded into a texture (1284x5582, max=4096x4096)
项目中加载一个尺寸1284x5582的一张大图,使用加载图片的是Picasso.由于图片太大,控件无法显示.查看log发现出现:Bitmap too large to be uploaded into a texture (1284x5582, max=4096x4096);经过查找资料是因为当开启硬件加速的时候,GPU对于openglRender 有一个限制,这个不同的手机会有不同的限制。解决办法:在清单文件Manifest里面的application标签下添加 android:hardwar转载 2021-10-15 12:32:10 · 206 阅读 · 0 评论 -
Android Studio添加开源库和Jar包报错: Error:Error converting bytecode to dex
最近在做一个Android小项目的时候,添加Github上一个开源库,官方文档只提供了Maven的引入方法,最后自己在Maven Central中找到了Gradle的依赖方式。之后项目可以正常Gradle Build,但是在点击“Run”,发布Apk到模拟器时,报了如下错误:Error:Error converting bytecode to dex:Cause: Dex cannot parse version 52 byte code.This is caused by library dep转载 2020-05-11 14:05:42 · 397 阅读 · 0 评论 -
AndServer+Service打造Android服务器实现so文件调用
so 文件调用随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实现 java 层和 native 层(主要是 C/C++ )的相互调用,native 层经编译后产生 so 动态链接库,so 文件具有可移植性广,执行效率高,保密性强等优点。那么...转载 2020-04-08 22:55:00 · 331 阅读 · 1 评论 -
结合AndServer,实现抖音X-Gorgon算法,设备id生成接口
结合AndServer实现接口开发Gradle引入依赖 1 2 3 implementation'com.yanzhenjie.andserver:api:2.0.5' annotationProcessor'com.yanzhenjie.andserver:processor:2.0.5' implementation'co...转载 2020-04-09 14:50:32 · 5786 阅读 · 8 评论 -
在 Android 设备上搭建 Web 服务器--AndServer,不用注解的方式
一般而言,Android 应用在请求数据时都是以 Get 或 Post 等方式向远程服务器发起请求,那你有没有想过其实我们也可以在 Android 设备上搭建一个小型 Web 服务器,并且实现常规的下载图片、下载文件、提交表单等功能呢?下面要介绍的就是如何在 Android 设备上搭建一个 Web 服务器,这个 Web 服务器的功能有如下几点:接受客户端文件上传、下载文件 动态 Http ...转载 2020-04-09 14:47:04 · 1691 阅读 · 1 评论 -
像SpringMVC一样在Android上做Web开发
概述image.pngAndServer是Android平台的Web Server和Web Framework。 它基于编译时注解提供了类似SpringMVC的注解和功能,如果您熟悉SpringMVC,则可以非常快速地掌握它。源码地址: https://github.com/yanzhenjie/AndServer文档地址: https://www.yanzhenjie.com/...转载 2020-04-09 13:47:57 · 279 阅读 · 0 评论 -
使用NanoHttpd在Android项目中搭建服务器--文件服务器,Web服务器
NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小。github地址:https://github.com/NanoHttpd/nanohttpd。下载完demo项目后,解压,找到路径,我的是放在F盘下:F:\nanohttpd...转载 2020-04-09 10:26:40 · 2572 阅读 · 0 评论 -
在Android APP内部实现一个Http Server——NanoHttpd 简单剖析
前言最近公司产品(门禁系统)由安卓这边来实现,需要和宇泛人脸识别终端进行对接,对接过程中说白了,也就是在互相的调接口(这也就是项目做完了敢这么说吧),其实刚刚开始接触这块东西的时候还是挺懵圈的,理顺宇泛的文档,发现好多东西(将人员信息上传至宇泛设备、设置是否允许宇泛设备开门、设置宇泛设备的识别回调地址),这些都是通过Httppost 方式提交数据就好了吗!刚开始看的时候啊,那给我乐...转载 2020-04-08 22:58:01 · 3591 阅读 · 1 评论 -
一次关于Netty+Gson造成内存泄露的分析排查
最近做了一个内部系统之间的数据同步服务器,client端通过socket发送经过压缩的json数据到server端,server完成数据解码和保存。server架构:netty+Gson解码在做压力测试的时候,竟然发现server内存泄露。分析内存泄露的时候,其实我们可以从简单方法入手,因为jdk1.6后自身就带有不错的内存分析工具,而且我认为使用好这些工具基本足够高,因为如果你对这些工具...转载 2020-04-07 11:06:05 · 395 阅读 · 0 评论 -
Calendar.getInstance()内存泄露--关于Calendar.getInstance() 调用位置 对性能的影响
private static Calendar cal = Calendar.getInstance();public final static long getMsgid(long GwSeq) {long res = 0;cal.setTimeInMillis(System.currentTimeMillis());long month = cal.get(Calendar....转载 2020-04-06 23:34:54 · 2001 阅读 · 1 评论 -
Android——距离传感器(PROXIMITY)的应用
https://blog.csdn.net/Li_peilun/article/details/68921321有了之前加速传感器的知识,距离传感器也是一样的。来做一个通过距离传感器来记录你靠近它的次数。public class MainActivity extends Activity { private TextView tv; private Sensor se...原创 2020-03-25 15:08:22 · 1702 阅读 · 0 评论 -
实时获取Android 各版本电量的统一方法
原文链接:https://blog.csdn.net/qijian0503/article/details/81910342亲测可用上运行结果图上代码 /** * 实时获取电量 */ public static int getSystemBattery(Context context){ int level = 0; ...转载 2020-03-24 15:14:32 · 263 阅读 · 0 评论