Android开发
原总破局
刻意训练,积极反馈。
展开
-
Android model应用aar-2
model引入aar原创 2022-09-14 13:13:36 · 556 阅读 · 0 评论 -
Android model应用aar
model引用aar原创 2022-09-14 12:54:46 · 873 阅读 · 0 评论 -
aar打包以及混淆问题
我们做sdk,经常要打成aar包。如何打aar包?1、首先module必须是library2、build.gradle写的应用aar和module,要改成compileOnly,这样打包的时候就不会报错,因为aar不允许包含其他aar3、4、aar包如何混淆build.gradle buildTypes { release { minifyEnabled true proguardFiles getDef...原创 2021-12-14 10:48:35 · 3246 阅读 · 0 评论 -
Java 枚举
推荐使用枚举替换常量,有如下优点1、枚举不用专门赋值,而常量必须定义值。有的时候我们并不关心常量的值,只是想区分不同的状态。2、枚举有内置的方法比如values(),我们可以使用这个方法轻易地打出所有的枚举值比如ordinal(),我们可以打印出枚举的序号3、枚举可以限定我们参数的范围例如enum Season{ SPRING("spring1"), SUMMER("summer1"), AUTUMN("autumn1"),WINTER("winter1".原创 2021-11-02 11:00:13 · 110 阅读 · 0 评论 -
java如何连续删除list中的数据
java连续删除list中的数据一个list列表中有40个数据,连续删除第20到30个数据。错误示范 public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for(int i = 0; i < 40; i++ ){ list.add(i); } for(int i = 2原创 2021-10-19 11:19:34 · 1166 阅读 · 0 评论 -
MVC讲解
我们开发过程中,经常用到MVC,MVP,MVVM等架构。MVC是基础,所以我们先来学习下什么是MVC模式。我们开发过程中,经常用到MVC,MVP,MVVM等架构。MVC是基础,所以我们先来学习下什么是MVC模式。MVC分为三部分M(model)V(view)C(controller)Model:负责数据读取,业务逻辑,状态保存等。View:数据展示,用户交互Controller:View层和Model层通过controller来进行连接。MVC使用了策略模式。我们原创 2021-10-11 16:26:40 · 229 阅读 · 0 评论 -
Activity的启动模式
activity四种启动模式standard 标准模式,默认模式Activity依次压栈入栈singleTop 栈顶复用模式,如果activty在栈顶,直接使用,走onNewIntent。如果不在栈顶,创建ActivitysingleTask 如果Activity所要求的栈中存在Activity的实例,走onNewIntent,并清空Activity实例以上的activity。如果不存在则创建activity。singleInstance 加强版singleTask,activty独占...原创 2021-09-02 19:20:13 · 76 阅读 · 0 评论 -
Activity的生命周期
新建两个简单的activityActivityFirst public class ActivityFirst extends AppCompatActivity { ActivityFirstBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { ActivityUtil.printLog("ActivityFirst onCreate");.原创 2021-09-02 19:11:50 · 131 阅读 · 0 评论 -
Android AMS(android 11)
AMS庞大而复杂,我们今天就看下如何启动一个activity吧。只看流程。可以结合这个图https://blog.csdn.net/qq_15255121/article/details/119219530我们启动一个activity都会调用startActivityForResult@Override public void startActivity(Intent intent) { this.startActivity(intent, null);原创 2021-08-31 12:28:23 · 620 阅读 · 0 评论 -
Handler原理
Android 官方文档上是的描述A Handler allows you to send and processMessageand Runnable objects associated with a thread'sMessageQueue. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler it is...原创 2021-08-20 15:44:19 · 284 阅读 · 0 评论 -
Android性能优化-------ANR
为什么会发生ANR当您的 Activity 位于前台时,您的应用在 5 秒钟内未响应输入事件或BroadcastReceiver(如按键或屏幕轻触事件)。 虽然前台没有 Activity,但您的BroadcastReceiver用了相当长的时间仍未执行完毕。常见的ANR类型应用在主线程上非常缓慢地执行涉及 I/O 的操作。 应用在主线程上进行长时间的计算。 主线程在对另一个进程进行同步 binder 调用,而后者需要很长时间才能返回。 主线程处于阻塞状态,为发生在另一个线程上的长操...原创 2021-08-20 11:36:58 · 218 阅读 · 0 评论 -
Android性能优化-------内存优化
Webview内存泄漏org.chromium.android_webview.AwContents我们会在onAttachedToWindow中进行注册,在onDetachedFromWindow中进行解注册public void onDetachedFromWindow() { if (isDestroyed()) return; if (!mIsAttachedToWindow) { Log.w(TAG, "onDetachedFromWindow calle原创 2021-08-18 20:15:52 · 347 阅读 · 0 评论 -
Android性能优化-----布局优化
为什么需要布局优化。如果布局层级比较多,那么就会导致绘制的工作加剧,导致性能降低。布局优化的原则就是减少布局的层级,能复用的就复用。下面我们介绍下常见的布局优化方法。1、选择低复杂度的的viewGroup,同时要避免层级太深。满足要求的情况下尽量选择LinearLayout,FrameLayout,因为想较于RelativeLayout计算量要小。如果LinearLayout,FrameLayout中为了达到高复杂度的效果,需要嵌套,那么这时候使用RelativeLayout比较合适原创 2021-08-18 16:05:53 · 213 阅读 · 0 评论 -
okhttp的缓存机制
okhttp加入缓存我们可以通过下面的代码进行实现 File file = new File(DirUtil.getCacheDir() + File.separator + "okhttp"); int cacheSize = 10 * 1024 * 1024; Cache cache = new Cache(file, cacheSize); okHttpClient = new OkHttpClient.Builder().cache(cac原创 2021-08-18 11:55:28 · 2052 阅读 · 0 评论 -
okhttp自定义拦截器
okhttp里面是通过责任链加拦截器实现的重试与重定向、加header、缓存、联网、服务器读取数据的功能。 上图黑色线是联网前请求数据的流转,红色线是返回后数据的流转。我们自定义的intercept和自定义的networkintercept的位置如图所示。如何自定义呢?public class NetCacheInterceptor implements Interceptor { ...原创 2021-08-18 10:57:32 · 1479 阅读 · 0 评论 -
okhttp原理分析
看源码还是要看原理,看每个细节会让人不知所云。今天我们分析下okhttp的分发器、责任链、拦截器。okhttp的使用如下OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.bxaidu.com") .build(); client.newCall(reque原创 2021-08-17 15:11:43 · 256 阅读 · 0 评论 -
Activity的创建过程
总以为android的框架不会变,真实啪啪打脸。在学习《android的艺术之旅》。按照书上讲的对着源代码,发现完全不同了。我就自己总结了下画了流程图。原理没有变,还是通过ActivityThread中的ApplicationThread进行信息交互。下面是完整的流程图...原创 2021-07-29 20:06:04 · 215 阅读 · 0 评论 -
Ijkplayer---ijkmp_android_create分析
static voidIjkMediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this){ MPTRACE("%s\n", __func__); IjkMediaPlayer *mp = ijkmp_android_create(message_loop); JNI_CHECK_GOTO(mp, env, "java/lang/OutOfMemoryError", "mpjni: native_se.原创 2021-07-19 17:30:33 · 347 阅读 · 1 评论 -
jetpack--------Camerax
官方文档https://developer.android.google.cn/jetpack/androidx/releases/camera引入库def camerax_version = "1.0.0" // The following line is optional, as the core library is included indirectly by camera-camera2 implementation "androidx.camera:camera-c原创 2021-07-19 16:00:07 · 274 阅读 · 0 评论 -
IjkMediaPlayer的mNativeMediaPlayer的设置
public final class IjkMediaPlayer extends AbstractMediaPlayer { @AccessedByNative private long mNativeMediaPlayer;}@AccessedByNative意思是通过native代码进行赋值在IjkMediaPlayer有下面一段代码 public static void loadLibrariesOnce(IjkLibLoader libLoader) { ..原创 2021-07-17 16:46:08 · 549 阅读 · 0 评论 -
android studio使用so、jar、aar包
plugins { id 'com.android.application'}android { compileSdkVersion 30 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.yuanxuzhen.testandroid" minSdkVersion 19 targetSdkVersion 30 versionCod.原创 2021-07-16 17:51:26 · 306 阅读 · 2 评论 -
android studio 打so包、jar包、aar包
使用前面https://blog.csdn.net/qq_15255121/article/details/118809279?spm=1001.2014.3001.5501写的native代码1、打so修改module的build.gradle externalNativeBuild { cmake { cppFlags "-std=c++11" abiFilters 'armeabi-v7a原创 2021-07-16 17:48:10 · 905 阅读 · 0 评论 -
Android studio 已有项目加入ndk模块
通过https://blog.csdn.net/qq_15255121/article/details/115244956这篇文章我们可以很快地创建ndk工程。今天我们讲一讲如何在先用的工程中加入ndk。1、我们创建一个module ----yuannative(这一步非必须,可以在app模块直接添加)2、我们写CMakeListcmake_minimum_required(VERSION 3.10.2)add_library( # Specifies the name of .原创 2021-07-16 17:35:16 · 1137 阅读 · 1 评论 -
JetPack------ROOM
https://developer.android.google.cn/jetpack/androidx/releases/roomhttps://developer.android.google.cn/training/data-storage/room原创 2021-07-15 13:14:56 · 142 阅读 · 0 评论 -
ANativeWindow
Surfaceview中的surface是用来渲染视频的,而编解码一般都是用C或C++来实现的。那么Native就要能够操作SurfaceView中的surface。而ANativeWindow正是android为我们提供的Surface。先上流程图ANativeWindow_fromSurface /** * Return the ANativeWindow associated with a Java Surface object, * for interacting wi.原创 2021-07-15 11:35:07 · 2337 阅读 · 0 评论 -
Java注解
注解的类型:源码注解 编译时注解 运行时注解什么是源码注解?注解只在源码中存在,编译生成的.class文件已经不存在了什么是编译时注解?注解在源码和编译后的class文件中都存在的注解什么是运行时注解?在运行过程中,通过反射可以获取到的注解。编译时注解和运行时注解的区别(RetentionPolicy.CLASS和RetentionPolicy.RUNTIME)?编译时注解是给ide和插件开发者使用的,通过注解在编译时生成代码。运行时注解是在代码运行..原创 2021-07-09 15:01:25 · 126 阅读 · 0 评论 -
Android 录制音视频
打开cameraprivate void openCamera(int position) {if (mCamera == null) {mCamera = Camera.open(position);int degree = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 0 : 90;mCamera.setDisplayOrientation(degre...原创 2021-06-15 22:53:22 · 721 阅读 · 4 评论 -
Android 采集音频与音频解码
使用AudioRecord采集音频pcm数据,使用MediaCodec转化为aac数据package com.yuanxuzhen.yuanrecord;import android.content.Context;import android.media.AudioFormat;import android.media.AudioRecord;import android.media.MediaRecorder;import java.io.File;import java.io.F原创 2021-06-10 21:34:40 · 912 阅读 · 2 评论 -
android ndk crash 调试
本文重点讲解如何根据崩溃信息找到对应的c/c++崩溃行数。当ndk崩溃后,我们会得到下面这样的信息这样的信息是没有办法定位问题出在哪里的。我们可以使用工具去定位问题出在那个文件那一行第一种方法addr2line工具工具位置:/Users/yuanxuzhen/Library/Android/sdk/ndk/对应版本ndk/toolchains/对应编译的平台/prebuilt/darwin-x86_64/bin/对应的addr2line命令 /Users/yuanxuzhe.原创 2021-04-01 15:24:18 · 371 阅读 · 0 评论 -
ndk 开发(ndk层调用java层方法)
1、ndk层修改java层的对象的成员package com.yuanxuzhen.testnative;public class UserData { public String name; public String sex; public int age; public UserData(String name, String sex, int age) { this.name = name; this.sex = sex;原创 2021-05-31 20:27:02 · 590 阅读 · 0 评论 -
ndk开发使用C语言(android studio)
https://blog.csdn.net/qq_15255121/article/details/115244956这篇文章wo'emn原创 2021-05-31 14:28:39 · 669 阅读 · 1 评论 -
android使用apktools实现自动打包(脚本)
我们要快速地打渠道包,同时修改渠道包中的资源(软件名字,软件icon)。本文实现了相应的功能。提供相应的脚本。可以一键实现反编译,修改,打包的功能。修改脚本中自己要替换的内容,修改签名文件即可打出自己想要的包。对于软件名的修改,提供了从json文件中读取相应字段的功能。只要修改相应的工作路径即可打出修改后产生包。使用方式命令行执行 : csdn 基础apk 资源目录 输出目录资源地址:链接: https://pan.baidu.com/s/1PhzU-D1DNXY1r...原创 2021-04-27 20:53:04 · 416 阅读 · 0 评论 -
Android View的事件分发机制 ---------------36
点击事件的传递规则所谓的点击事件传递就是MotionEvent的传递。就是MotionEvent产生后如何传递给要处理的View.整个过程有三个非常重要的方法来完成public boolean dispatchTouchEvent(MotionEvent ev) Activity.java . View.java public boolean onInterceptTouchEvent(MotionEvent ev) . ViewGroup.java public bool...原创 2021-04-19 20:24:12 · 123 阅读 · 0 评论 -
jvm面试相关
本文参考面试小抄1、jvm的内存模型java 将虚拟机分为5大区域。方法区、Java栈、本地方法栈、堆、程序计数器。程序计数器:线程私有的,是一块很小的内存空间,作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址。虚拟机栈(Java Stack):线程私有的,每个方法执行的时候都会创建一个栈帧,用于存储局部变量、操作数、动态链接和方法返回等信息,当线程请求的栈深度超过虚拟机允许的最大深度,就会抛出StackOverFlowError.本地方法栈:线程私有的原创 2021-03-31 15:14:04 · 73 阅读 · 0 评论 -
JAVA 强引用 软引用 弱引用 虚引用
下面谈两个问题1、强引用、软引用、弱引用、虚引用的区别?2、java是值传递还是引用传递?1、强引用、软引用、弱引用、虚引用的区别?强引用:我们平时new一个对象时生成的引用,就是强引用。如果一个对象有强引用,垃圾回收器是无法回收的。软引用:软引用作为缓存来使用。如果内存足够就会保留软引用,如果内存紧张就会回收软引用。弱引用:弱引用也作为缓存来使用,但是垃圾回收是一定会回收的。虚引用:可有可无,可以看做根本不是引用。如果一个对象被设为虚引用,可以被随时回...原创 2021-03-30 11:26:25 · 88 阅读 · 0 评论 -
Java的垃圾回收
常用的有以下两种方式1、引用计数2、复制算法3、分代收集1、引用计数增加一个引用,统计数目加1。删除一个引用数目减1.当计数变为0时,垃圾回收器进行回收。2、复制算法此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域, 把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现“碎片”问题。 当然,此算法的缺点也是很明显的,就是需要两倍内存空.原创 2021-03-30 11:21:30 · 84 阅读 · 0 评论 -
android ndk静态注册
我们要进行android ndk开发要从android studio创建一个c++项目1、2、3一路nexta 定义自己的native方法package com.yuanxuzhen.testnative;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;.原创 2021-03-26 15:24:24 · 327 阅读 · 0 评论 -
android ndk动态注册
android的ndk开发需要一个桥梁jni,来将java和c/c++联系起来。分为动态注册和静态注册。我们先来谈论一下如何进行动态注册1、写java端的代码package com.yuanxuzhen.testnative;public class JNIDynamicLoad { static { System.loadLibrary("dynamic-lib"); } public native int sum(int x, int y)原创 2021-03-26 14:50:21 · 285 阅读 · 2 评论 -
Bound Service 1
Bound Service 可以实现多个组件绑定一个service。适应binder的使用范围是1、同一个应用2、同一个进程下面我们通过一个例子来说明如何使用BounderService先写一个布局 布局当中有两个按钮 一个是绑定一个是解除绑定 android:id="@+id/catalog_layout" android:layout_w原创 2017-08-02 17:36:42 · 291 阅读 · 0 评论 -
Activity生命周期详解
1、Activity的创建步骤onCreate->onStart->onResume2、Activity的销毁步骤onPause->onStop->onDestroy3、Activity到后台onPause如果长时间没有返回来执行顺序是 onPause->onSaveInstanceState->onStop4、Activity到前台onResume如果acti原创 2017-07-25 17:55:42 · 375 阅读 · 0 评论