
android
文章平均质量分 63
WizardDragon
这个作者很懒,什么都没留下…
展开
-
Android Binder服务端被调用,一定是运行在Binder线程中吗?
不一定。如果是跨进程调用,即Binder的代理(proxy)端和Binder的服务(Server)端是不同的进程,则Binder服务端方法执行是在Binder线程中的,比如:打印线程名,Thread.currentThread().toString()为:Thread[Binder:19118_3,5,main]但如果,Binder的代理(proxy)端和Binder的服务(Server)端是在同一个进程,则Binder服务端方法执行的线程跟Binder代理...原创 2021-07-15 19:31:09 · 892 阅读 · 1 评论 -
Android一种简单的补丁修复方法--使用DexFile
在合适的时机(最好放在Application的attachBaseContext),使用DexFile方式,遍历所有的类,然后调用loadClass。 try { DexFile dexFile = new DexFile(filePath); Enumeration<String> entries = dexFile.entries(); while (entries.hasMoreElements()) {原创 2021-06-25 17:39:56 · 1045 阅读 · 0 评论 -
关于Android的UI线程的一些问题
1.可以在不同的线程中操作View吗? 不可以。 如果在其他不同的线程中操作View,比如:调用Button.setText(""),应用会因为抛出异常而崩溃。异常一般如下: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.2.Android为什么不让在多...原创 2021-04-23 11:32:26 · 230 阅读 · 0 评论 -
使用SWIG,在java编程中调用动态库
1. SWIG是什么? SWIG的官方网站是http://www.swig.org/。 官方网站第一句话:SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.... ...SWIG is typically used to parse C/C++ interfaces an...原创 2021-02-23 10:41:56 · 1698 阅读 · 1 评论 -
使用DirectByteBuffer在java层和c层之间传递和交换数据
因为业务需要,需要在java层频繁调用本地层so库中的代码,并且需要将java中的数据交给so库处理,so库处理完成之后交给java层,java层再使用。 “传统”的做法是,在JNI中的java层将byte数组传递到c代码中,c代码使用GetByteArrayElements和ReleaseByteArrayElements的代码分别取数据和回写数据,这样的写法没有问题,一般情况下也是这么用的。但是,这种用的话会明显感觉到多了2次内存copy。因为也需要大量调用,所以想能不能再找到一种更快...原创 2021-02-03 14:29:00 · 3191 阅读 · 2 评论 -
Android上的ContentObserver
在Android上,ContentObserver原本的目的是方便监听插入数据库中的数据的变化的,不过可以利用它来跨进程通信。ContentObserver的跨进程通信稍稍有点像BroadcastReceiver,不过确实不一样。跨进程的使用方法:1.先写一个类继承ContentObserver,这点跟BroadcastReceiver使用有些类似,它是继承BroadcastReceiverpublic class MyObserver extends ContentObserver ..原创 2021-01-06 10:53:08 · 932 阅读 · 0 评论 -
如何在navigation中的fragment之间使用Android Material中的动画
如何在navigation中的fragment之间使用Android Material中的动画? AndroidMaterial的依赖是:implementation 'com.google.android.material:material:1.2.0' 先进行navigation的编写(这里不多说,假定已经完成了), 然后,在需要在跳转的地方加上:exitTransition = MaterialElevationScale(true)reenterTransi...原创 2020-08-29 15:58:03 · 762 阅读 · 0 评论 -
如何使用jetpack中的navigation
假定场景是:程序启动 -- Activity_AActivity_A中有两个按钮,btn_A和btn_B; btn_A点击跳转到Fragment_B, 点击Fragment_B中的按钮btn_A跳转到ActivityC中 btn_B点击跳转到Activity_B中;1. 先集成依赖: 主工程的build.gradle中的buildScript中的 dependencies中加入: classpath "androidx.navigation:naviga...原创 2020-08-15 15:54:24 · 317 阅读 · 1 评论 -
关于Android MVP的自我理解
Android上的MVP有两种思路实现: 一种是将Activity、Fragment等作为view,抽象出来一个Presenter来实现; 一种是将Activity、Fragment等作为Presenter,抽象出来一个View来实现。 两种思路各有利弊。 第一种思路是大家使用最多的,比较好理解,比较符合原MVP的思想,Presenter可以复用,但有个原创 2018-01-09 15:37:28 · 349 阅读 · 0 评论 -
在Android Studio下的一种模块化思路
随着项目功能的增多,我们在Android Studio下的module也越来越多,或者说本身我们就想将功能按module划分。比如,你想做个 “微信” 一样的应用,有聊天模块、朋友圈模块,购物模块、游戏模块等等,你想把这些模块以module划分,通常情况下是将这些module打包成一个微信apk的,但在某些情况下又想能够单独发一个 朋友圈apk,或者只有聊天功能的a原创 2017-12-18 16:57:06 · 893 阅读 · 0 评论 -
学习Retrofit
Retrofit是什么?做过Android开发的想必都知道,它是GitHub上java语言中star(24.3k,20171013 )最多的网络请求库之一。 网上有很多优秀的文章介绍如何使用Retrofit,这里我只想将我自己一开始学习使用Retrofit的过程记录下来。1. 如何将Retrofit引用到工程中? Retrofit目前有Retrofit1原创 2017-10-17 10:47:56 · 345 阅读 · 0 评论 -
Android开发中遇到加载有相同函数的so库时的问题
在项目中遇到了加载so库比较诡异的一个现象,现记录下来,以做总结。 以下以举例的方式讲述: 项目中有两个so库,一个是libhellojni.so,一个是libhellojni2.so,这两个库的都有相同函数,一个是动态注册的,一个是静态注册的,如下: 编译libhellojni.so的代码如下: jni_self.cpp1#inc原创 2017-10-13 11:26:18 · 4763 阅读 · 0 评论 -
学习Glide--Android图片加载框架
Glide是什么?它是一个在开发Android时用于图片加载的框架。 在GitHub上以“ language:java android ” 进行搜索,并以 Most stars 排序,它排名第5,有17.9k个star(在2017-09-21),是Android图片加载框架在GitHub上排名最靠前的。 不过,也有一些跟Glide类似的图片加载框架:Univer原创 2017-09-22 10:34:29 · 532 阅读 · 0 评论 -
Android系统中的Application和四大组件一些方法的启动顺序和一些坑
一 背景 在做一个项目时,我们想在应用最早启动时,先做一些判断,然后根据判断的结果再决定要不要对其他应用提供服务。 对其他应用提供服务指的是,我们的应用中有ContentProvider,第三方应用通过call方法调用到我们提供的ContentProvider,ContentProvider执行逻辑后并给调用的返回结果。当第三方应用调用我们的应用时,我们的应用存在启动和未启动的原创 2017-03-26 17:55:29 · 8820 阅读 · 1 评论 -
只写算法类,不写额外代码,如何在Android应用中加载它?
一、开头 某一天一个同事跟我讨论有没有做过这样的事情:在写Android应用时,只需写实现类,而不在实现类以外的任何地方(包括配置文件)写任何代码,就能在程序执行时,调用到这个实现类。 这样的应用场景主要是在要写很多个具有相同父类或者接口类的算法类,写完这些算法类又需要在特定的地方做这些算法类的初始化,才能在程序中使用。而做这样的事情的时候,我们可能是很多人在原创 2017-04-07 11:49:52 · 715 阅读 · 0 评论