自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Android 11 FileProvider的使用和限制

从Android 7开始,将不允许在app之间,使用file uri,即file://的方式,传递一个file,否则会抛出异常:FileUriExposedException ,其解决方案,就是使用FileProvider,用content://代替file://,同时需要将targetSdk,升级到24。主要用于系统相机拍照及图片裁剪、应用之间数据访问、应用的升级等。

2024-09-12 09:30:00 746

原创 Android开发,打开第三方应用(含系统应用)

Android开发,打开第三方应用(含系统应用)

2024-09-06 09:30:00 141

原创 Android 11添加系统服务,并封装jar包供第三方应用使用

如果你是做技术支持,有没有遇到这种情况,客户既要实现具备系统权限的功能,但是呢,又不想把自己的应用做成系统应用。这时候,我们可以考虑这种方式。

2024-09-02 11:02:20 979

原创 Android源码编译_内置apk

在开发过程中,有一部分apk,我们是需要出厂内置好的,例如输入法、客户定制app等,这里内置分两种,一种是只内置apk,不含apk源码,一种是包含apk源码。

2024-09-02 09:30:00 592

原创 Android进程通信-AIDL

主要实现是,一个进程作为服务端,提供数据或数据接口,另一个进程作为客户端,通过绑定的service来获取服务端提供的数据或数据接口,达到进程的通信。

2024-08-30 09:45:00 802

原创 Android应用在未启动的情况下无法收到开机广播

当我们app安装后,未启动,则标记为stoped状态,只有至少手动打开一次,才能改变状态,接收特定广播,也是为了防止广播无意开启未启动应用的服务

2024-08-29 09:45:00 355

原创 内置系统apk无法覆盖安装

系统级别app内置,设置persistent无法覆盖安装

2024-08-27 10:34:45 147

原创 Android源码编译_编译jar包

开发过程中了,我们很多时候会为了方便,将一些接口封装成jar包来使用。利用aosp源码编出jar包。我这里用的是mtk Android 11的源码。

2024-08-19 09:30:00 150

原创 Android源码编译_安装jdk

Ubuntu安装jdk

2024-07-11 09:27:15 219

原创 pk8/x509.pem转换为keystore

做系统的,一般给我们的不是我们常用的.keystore或者.jks,而是给我们.pk8和.x509.pem文件。这时候我们就需要转一下

2024-05-30 09:15:00 708

原创 Android开发-JNI和NDK编程(JNI开发流程)

JavaJNI的本意是 Java Native Interface(Java本地接口),它是为了方便Java 调用C、C++等本地代码所封装的一层接口。我们都知道,Java的优点是跨平台,但是作为优点的同时,其在和本地交互的时候就出现了短板。Java的跨平台特性导致其本地交互的能力不够强大,一些和操作系统相关的特性Java无法完成,于是Java提供了JNI专门用于和本地代码交互,这样就增强了Java语言的本地交互能力。通过JavaJNI,用户可以调用用C、C++所编写的本地代码。

2024-05-27 14:47:26 914

原创 Android进程通信机制(IPC机制)

IPC,是进程之间通信或跨进程通信,为Inter-Process Communication得缩写,IPC也不是Android所独有得,任何一个操作系统都需要有相应的IPC机制。IPC应用的场景,既然是进程间通信,那就一定是多进程的场景下才考虑,比如某些工作需要运行在独立的进程中,或者利用多进程,开辟更大的内存空间等。Android中最有特色的进程间通信方式是Binder,除了Binder,还有Socket,管道、信号量、文件共享。二、Android中的多进程模式。

2024-03-31 10:25:04 1434 1

原创 Android性能优化-内存泄漏分析之MAT工具

通过简单的内存泄漏示例,记录使用MAT工具,分析内存泄漏日志。

2024-03-26 17:15:25 381

原创 Android申请允许管理所有文件权限

Android申请允许管理所有文件权限

2024-03-25 10:59:32 751

原创 Android性能优化-优化方向

主要介绍Android开发过程中的一些性能优化的大致方向和方法

2024-03-20 09:30:00 1550 1

原创 Android性能优化-响应速度优化和ANR日志分析

主要通过系统保存的NAR日志,帮助我们分析ANR出现的位置和原因,并加以修改

2024-03-18 16:53:42 378 1

原创 Android 屏幕适配相关概念及适配方案

简单记录,学习Android屏幕适配相关的总结和记录

2024-02-21 15:27:13 960

原创 RecycleView的缓存问题

RecycleView的缓存机制,回收和复用

2023-01-06 10:07:15 572

原创 RecyclerView的使用和源码理解(一)

recyclerView的详细使用,从官方介绍可知:“一个灵活的视图,用于提供进入大型数据集的有限窗口”。

2023-01-03 15:02:12 249

原创 Android使用POI操作excel(支持xls和xlsx)

一、说明及准备工作1.用于AS使用POI读取、创建、另存excel,兼容xlsx和xls格式2.下载poi-3.12-android-a.jar、poi-ooxml-schemas-3.12-20150511-a.jar两个POI包(版本自行选择),放入libs目录3.打开app目录的build.gradle,添加完整依赖:然后就可以开始干活了二、文件读取,删除操作过程1.创建workbook对象(1). 创建.xlsx文件对象 workbook = new XSSWorkbook(

2022-05-06 16:27:26 4418

原创 ViewRoot和DecorView

在介绍VIew的三大流程之前,我们先介绍一些基本概念,以便更好的理解View的measure、layout、draw过程,这里介绍VIewRoot和DecorView。1.ViewRoot是应于ViewRootImpl类,它连接VIewManager和Decor View。View的三大流程,是通ViewToot來完成。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时创建ViewRootImpl对象,并将ViewRootImpl对象和

2022-04-18 15:01:29 2280

原创 View的滑动冲突

滑动冲突一般是在界面中,内外两层同时可以滑动,这个时候就会产生滑动冲突。1、常见的滑动冲突场景场景1:外部滑动方向和内部滑动方向不一致场景2:外部滑动方向和内部滑动方向一致场景3:场景1和2嵌套分别如下:场景1主要是将ViewPager和Fragment配合使用,达到页面滑动的效果,可以通过左右滑动,切换页面,而在每个页面又会又ListView。如果使用的是ViewPager,就不需要注意这个问题,因为ViewPager内部已经处理了这个冲突。如果是Scroll View等,就需要我们手动处理

2022-04-18 10:22:00 367

原创 View的事件分发机制

1、点击事件的传递规则点击事件,即要分析的对象是MotionEvent,所以,点击事件的分发,实际是MotionEvent 的分发过程,主要由dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。public boolean dispatchTouchEvent(MotionEvent ev)用来进行事件的分发,如果事件能够传递到当前的View,则调用此方法,返回结果受当前View的onTouchEvent和下一级的dispatchTouchEv

2022-04-11 15:03:25 3628

原创 View的弹性滑动

弹性滑动,就是将一个大的滑动分成若干个小的滑动,并在一个事件段内,完成。实现方式有多种:1.使用Scroller对于Scroller 在View的基础知识中有过一点介绍,看一下源码,是如何实现弹性滑动的 Scroller scroller = new Scroller(mContext); //缓慢的移动到指定位置 private void smoothScrollTo(int destX,int destY){ int scrollX = getScrollX(); int deltaX

2022-03-02 11:53:28 1811

原创 View的滑动

View的滑动,用途很多,下拉刷新,通过滑动影藏和显示可以实现更多功能。主要实现方式包括一下三种:通过View本身提供的scrollTo/scrollBy方式来滑动通过动画,给View施加移动来实现滑动效果通过改变View的LayoutParams使得View重新布局,从而实现滑动1、使用scrollTo/scrollBy这两个方法是View自身提供的,来实现滑动效果,实现如下:/***Set the scrolled position of your view. This will c

2022-02-28 16:16:14 1713

原创 View的基础知识

1、view介绍view是Android中所有控件的基类,不管是button,还是Text View,或复杂的布局RelativeLayout和ListView,它们的基类,都是View,它是界面层控件的一个抽象。通过VIewGroup可以看出,ViewGroup中含有多个View,但它也是继承自View,所以,View可以是一个单独的控件,也可以是多个控件组成的一组控件。2、View的位置参数View的位置由它的四个顶点来决定,分别是top(左上角横坐标)、left(左上角纵坐标)、right(右下

2022-02-25 11:29:00 5036

原创 Activity的启动模式

一、Activity的启动模式首先说一下Activity的工作原理,默认情况下,我们每启动一个 Activity,系统会创建一个实例并将他们一 一放入任务栈中,当我们结束的时候,一 一回退,遵循“先进后出”的方式。所以,假如我们将同一个Activity启动多次,系统会重复创建多个实例。为此它提供了启动模式来修改系统的默认行为。目前有四种启动模式:standard、singleTop、singleTask、singleInstance。standard:标准模式,也是系统默认的模式,他不管这个

2022-02-21 11:15:42 335

原创 Activity的生命周期变换分析

Activity生命周期分析

2022-02-15 15:25:09 1413

原创 GreenDao升级、可保留历史数据

前言在最初设计中,往往有很多因素未考虑到,在开发过程中,一些功能的改变,或者增加,使得最初的结构,无法满足当前的需求。从而需要对数据库做升级。特别是项目已经上线,自动升级,并且保留原有数据显得尤为重要。升级步骤1.新建类,继承DaoMaster.OpenHelper,并且重写onUpgrade(Database db,int oldVersion,int newVersion)方法,在升级方法中对数据库升级,并且对数据迁移。我这里用的大佬写的工具类MigrationHelper,地址:https://

2021-12-22 09:46:09 585

原创 GreenDao_基本配置和使用

核心类介绍1.DaoMaster它持有数据库对象(SQLiteDataBase),并且提供了创建和删除表的静态方法。有两个内部类,OpenHelper、DevOpenHelper实现SQLiteOpenHelper,用来创建数据库表结构。2.DaoSession:DaoSession用来管理Dao对象,可通过get方法,获取XXDao对象,进行对表的基本操作。DaoSession本身也提供了一些基本的持久性方法,例如:插入,删除,更新等。3.Dao实体访问对象,对每个实体XX,GreenDao会

2021-12-21 09:42:45 2051

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除