Android
文章平均质量分 89
hunter800421
这个作者很懒,什么都没留下…
展开
-
客户端日志打印规范
/ 正例:重写toString()方法,将实体类转换为JSON字符串@Override}原创 2022-08-13 01:46:04 · 1264 阅读 · 1 评论 -
【Android】AudioRecord::getMinBufferSize源码分析
Android,音频,AudioRecord原创 2022-05-07 17:05:43 · 1143 阅读 · 0 评论 -
sqlite锁机制和greenDAQ多线程
锁Android和iOS都是采用的sqlite作为默认数据库。在有并发业务的场景下,数据库需要提供锁机制来保证数据一致。sqlite3提供了五种级别的锁:未加锁(UNLOCKED)、共享 (SHARED)、保留 (RESERVED)、未 决(PENDING) 和排它(EXCLUSIVE)。SQLite 使用锁逐步上升机制,为了写数据库,连接需要逐级地获得排它锁,以最大限度的保证并发性。事务事务是与锁紧密关联的概念。SQLite有三种不同的事务,DEFERRED、 MMEDIATE和EXCLUSIVE,原创 2020-05-24 18:52:53 · 843 阅读 · 0 评论 -
360 Argus APM 源码分析(2)—— argus-apm-gradle源码分析
argus-apm-gradle源码分析argus-apm-gradle工程定义了一个gradle plugin,主要有以下两个作用:支持AOP编程,方便ArgusAPM能够在编译期织入一些性能采集的代码;通过Gradle插件来管理依赖库,使用户接入ArgusAPM更简单。argus-apm-gradle使用kotlin语言开发。这里我们假定大家已经熟悉gradle plugin的开发...原创 2019-01-24 20:48:21 · 1499 阅读 · 2 评论 -
360 apm框架Argus源码解析(1)——开始
开始先看一个简单的代码示例,演示如何集成360 Argus APM:public class ArgusAPMApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); ...原创 2019-01-23 20:15:20 · 1218 阅读 · 0 评论 -
Android多媒体框架(1)——MediaCodec.java源代码分析
概述MediaCodec勇于访问底层的编解码器,是Android底层多媒体支持框架的一部分。它可以操作三种数据:压缩后的,原始的音频数据,以及原始的视频数据。MediaCodec以异步的方式处理数据,会用到一组输入和输出缓冲区,后文会详细介绍。MediaCodec有内部类BufferInfo来描述缓冲区。BufferInfo的代码如下:public final static class B...原创 2019-01-12 22:02:22 · 3355 阅读 · 0 评论 -
android 支持webrtc
公司有个项目,需要在webview中加载视频,用到了webrtc技术。Android 4.4以后,浏览器内核采用的chromium,可以支持webrtc。所以基本上对于新出的手机,自动支持webrtc。使用webview时,只需要在代码中实现WebChromeClient的onPermissionRequest方法即可。只是为了针对特定网页申请的权限给予授权或者拒绝。代码如下:webView...原创 2018-11-15 16:06:48 · 5770 阅读 · 0 评论 -
Android OTA静默升级
1. 方案选择获取升级信息,有两种大方向可供选择:Push(服务端向服务器端推送更新)和Query(客户端主动查询)两种方案。Query实现比较简单,灵活;push需要长连接支持,以及全部设备id等信息,实现相对复杂。基于目前的需求和实际情况,决定采用客户端查询更新方式。2. 整体框架 图1. 升级示意图 图2. 升级时序图升级系统的示意图及时序图如上。主要流程上,大部原创 2018-01-16 14:21:42 · 6970 阅读 · 1 评论 -
Android h5全屏播放video
H5全屏播放,在iOS系统上基本没有什么问题,但是在android系统,却又各种各样的问题。H5自身对全屏的支持这个其实不难,只需在video标签加个webkit-playsinline属性即可,这个属性基本上在基于webkit内核的移动端都是没问题的,此全屏非彼全屏,它是在浏览器视窗内的全屏,并不是占居整个手机的全屏,当然我们做web端需要的就是在document的body内的视窗范围的原创 2017-10-25 10:51:01 · 5588 阅读 · 0 评论 -
google 官方ndk demo解析(二)——bitmap-plasma
本文将分析bitmap-plasma这个demo。这是一个使用c代码在bitmap上绘制细胞质效果的demo。CMakeList.txtcmake_minimum_required(VERSION 3.4.1)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")add_library(plasma SHARED plas原创 2017-09-28 14:22:10 · 1209 阅读 · 0 评论 -
Android 多媒体框架(2)—— android_media_MediaCodec.cpp源码分析
android_media_MediaCodec.cpp源码分析这里我们来分析和MediaCodec.java对应的native层类:android_media_MediaCodec.cpp的源代码。在该类的最后,我们会看到这样的代码:static const JNINativeMethod gMethods[] = {1881 { "native_release", "()V", ...原创 2019-01-31 18:05:58 · 2301 阅读 · 0 评论 -
Android多媒体框架(3)—— libstagefright中MediaCodec源码分析
libstagefright中MediaCodec源码分析和前两篇一样,我们按照MediaCodec的各个状态来分析libstagefright中MediaCodec的源代码。configure首先我们看一下configure在libstagefright中MediaCodec中的定义:438status_t MediaCodec::configure(439 con...原创 2019-02-03 15:26:48 · 2572 阅读 · 0 评论 -
360 Argus APM 源码分析(4)—— argus-apm-okhttp源码分析
argus-apm-okhttp源码分析OkHttp3Aspect类OkHttp3Aspect类是OKHTTP3的切面文件。@Aspectpublic class OkHttp3Aspect { @Pointcut("call(public okhttp3.OkHttpClient build())") public void build() { } ...原创 2019-02-14 20:15:46 · 521 阅读 · 0 评论 -
Android多媒体框架(4)—— AMessage,AHandler和ALooper源码分析
AMessage源码分析AMessage继承自RefBase类,它有AHandler和ALooper的成员mHandler和mLooper,并且ALooper还是它的友元。成员变量mWhat是消息id,成员变量mTarget指明消息的handler(只用于调试)。成员函数setWhat和setTarget分别设置这两个属性。void AMessage::setWhat(uint32_t wha...原创 2019-02-04 13:59:09 · 6374 阅读 · 0 评论 -
argus-apm-main中的task(1) —— FpsTask
argus-apm-main中的task(1) —— FpsTaskargus-apm-main中定义和实现了各个具体的监控task,包括Activity,网络,fps等等。这里我们先从fps作为例子入手分析。FpsTask类FpsTask类定义了fps监控的task,相当于是fps task的入口。先来看一下这个类的代码。public class FpsTask extends Base...原创 2019-02-15 12:08:30 · 391 阅读 · 0 评论 -
Android多媒体框架(5)—— MediaMuxer.jara源码分析
MediaMuxer.jara源码分析音视频通过Codec(编码器)编码之后,还需要经过MediaMuxer(混合器)“混合”。混合器在framework的实现就是MediaMuxer类。MediaMuxer中又个内部类OutputFormat:public static final class OutputFormat {80 /* Do not change these v...原创 2019-02-07 17:38:42 · 2881 阅读 · 0 评论 -
argus-apm-main中的task(2) —— Activity Task
argus-apm-main中的task(2) —— Activity TaskActivity Task实现对Activity的性能监控。我们在“开始”一篇里提到过,Activity的性能采集实现方式有两种,Instrumentation和AOP,而ActivitTask的start方法主要就做了一个判断:如果使能了ApmTask.FLAG_COLLECT_ACTIVITY_INSTRUMEN...原创 2019-02-15 19:31:38 · 386 阅读 · 0 评论 -
Android多媒体框架(6)—— MediaMuxer的jni代码分析
MediaMuxer的jni代码分析jni方法的定义MediaMuxer jni方法的定义在frameworks/base/media/jni/android_media_MediaMuxer.cpp中。static const JNINativeMethod gMethods[] = { { "nativeAddTrack", "(J[Ljava/lang/String;[Lja...原创 2019-02-08 14:25:55 · 1342 阅读 · 0 评论 -
Android多媒体框架(7)—— stagefright中MediaMuxer源码分析
stagefright中MediaMuxer源码分析私有属性定义MediaMuxer.h中定义了一些类的属性:const OutputFormat mFormat; sp<MediaWriter> mWriter; Vector< sp<MediaAdapter> > mTrackList; // Each track has its...原创 2019-02-08 15:33:35 · 800 阅读 · 0 评论 -
360 Argus APM 源码分析(3)—— argus-apm-aop源码分析
argus-apm-aop源码分析argus-apm-aop主要实现了面向Activity的切面和面向HttpClient和URLConnection的切片。阅读代码需要有AOP和aspectj的基础知识。TraceActivityTraceActivity类实现对Activity(还有Application)的切面。@Aspectpublic class TraceActivity...原创 2019-02-13 20:39:06 · 793 阅读 · 0 评论 -
Android引导页播放视频——使用VideoView
有时候大家看到QQ等软件的引导页,播放一段酷炫的视频,觉得很有意思,于是就会想要尝试自己去实现以下。其实很简单,用VideoView就可以实现。首先,创建定义的VideoView。public class CustomVideoView extends VideoView { public CustomVideoView(Context context) { sup原创 2017-09-20 15:14:58 · 2984 阅读 · 1 评论 -
Android Camera2 拍照(四)——对焦模式
本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换。一、手动对焦响应事件首先我们要实现点击preview区域进行手动对焦,这通过对TextureView注册touch事件实现。mTextureView.setOnTouchListener(new View.OnTouchListener() { @Override原创 2017-09-12 15:46:48 · 7488 阅读 · 2 评论 -
Android8.0新特性和API
本文翻译自google官方文档,原文链接:https://developer.android.com/about/versions/oreo/android-8.0.htmlAndroid 8.0(API level 26)位用户和开发者引入了一系列新特性和能力。本文将重点介绍针对开发者的新功能。用户体验画中画模式Android 8.0 允许Activity以画中画模式启动。PIP翻译 2017-09-01 15:16:20 · 9202 阅读 · 0 评论 -
H5中启动Android app
H5中判断应用是否安装H5中是无法直接判断应用是否安装的,但是可以间接判断。第一种方式,if(...){document.location = '';setTimeout(function(){ //此处如果执行则表示没有app},200);}这里的逻辑很简单,当没有成功打开app的时候新页面不会弹出则页面逻辑可言进行,如果进入了新页面,则页面逻辑便终止原创 2017-08-11 10:48:22 · 2236 阅读 · 0 评论 -
Cache-Control与retrofit缓存
Cache-ControlHTTP中这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。缓存指令是单向的,即请求中存在一个指令并不意味着响应中将存在同一个指令。常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。常用 cache-directive 值Cache-directive原创 2017-06-08 08:53:12 · 3068 阅读 · 1 评论 -
Gson解析json对不确定泛型的处理
最近项目中遇到个问题,服务端返回的json数据中,有个object中的内容是不确定的,条目不确定,key的值也不确定。我们使用的是Gson解析json。对于Gson,要把json转化为对应的实体对象,在不知道json object内部结构的情况下,这似乎不太好解决。比如,这样的json:"{a:1, b:'Hello,world!', c:{d:5,e:'gson'}}";其中ke原创 2017-04-19 18:55:03 · 5303 阅读 · 1 评论 -
Looper,Message,Handler
Looper负责的创建一个MessageQueue,然后进入一个无限循环体不断从该MessageQueue中读取消息,而消息的创建者就是一个或多个Handler。1、LooperLooper主要是prepare()和loop()两个方法。首先看prepare()方法:public static final void prepare() { if (sThre原创 2017-03-14 19:15:56 · 223 阅读 · 0 评论 -
SetContentView都做了什么
在Activity的onCreate方法中,可以调用setContentView(layout_id),来设置这个Activity的视图。那么setContentView都做了些什么呢?以下一个简单的Activity的代码:public class ViewDemoActivity extends Activity { @Override protected void o原创 2017-03-12 16:41:38 · 729 阅读 · 0 评论 -
Android适配总结
做Android适配的同学们头疼的一件事就是机型的适配了,因为Android系统开源的缘故,市面上有太多太多的手机型号,厂商私自定制rom,不同的屏幕尺寸,不同的屏幕分辨率,不同的系统版本不同的API,都给Android工程师们带了五花八门的适配难题。本文尝试对常见的适配问题及解决方案做一个归纳总结。系统版本适配这应该是相对最好解决的一类适配问题。因为Android系统的演进,有些旧的AP原创 2017-03-19 12:45:00 · 3148 阅读 · 0 评论 -
vlc-android(2.1.0)移植到Android Studio
1. 创建一个新的Android Studio项目VLCAndroid2. 删除新工程中src/main/java中所有文件和src/main/res文件夹,复制vlc-android/vlc-android/src中文件夹到src/main/java,复制vlc-android/vlc-android/res 和AndroidManifest.xml 到src/mian3. 复制vl原创 2016-07-12 17:05:11 · 3745 阅读 · 0 评论 -
Android app 开发框架
一个Android app 开发框架:1. 基于MVP模式构建2. 使用volley实现异步网络请求3. 使用线程池管理线程,实现本地异步请求。4. 使用GreenDAO实现数据库访问。5. 使用autolayout实现界面适配。项目主页:https://github.com/gengqifu/AndroidDevelopmentFramework原创 2017-03-01 17:45:12 · 778 阅读 · 1 评论 -
TabLayout详解
TabLayout简介TabLayout是Android Design Support Library新引入的控件,提供了一个水平的布局用来展示Tabs。TabLayout的基本使用方式方式一:布局中加入该控件:<android.support.design.widget.TabLayout android:id="@+id/tabLayout"原创 2017-08-11 14:01:46 · 445 阅读 · 0 评论 -
Android开发使用https及Webview访问https页面
HTTPS简介HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。所以,研究HTTPS协议原理,最终其实就是研究SSL/TLS协议。SSL/TLS协议不使用原创 2017-08-23 12:50:46 · 5606 阅读 · 0 评论 -
Android中的so库
Android设备的CPU类型目前Android设备已经支持多种CPU类型,包括:armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a: 第8代、64位ARM处理器。armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。x86: 平板用得比较多。x86_64: 64位的平原创 2017-08-28 10:35:32 · 421 阅读 · 0 评论 -
google官方android ndk demo解析(一)——audio echo
最近重新学习ndk,主要关注使用android studio进行ndk开发。google官方的demo无疑是最好的学习源码。首先分析audio echo这个项目。一、CMakeList.txtcmake_minimum_required(VERSION 3.4.1)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -W原创 2017-09-18 14:39:37 · 3308 阅读 · 0 评论 -
Android画不规则形状
经常会在移动应用中看到类似下图的各种图片:这样的图形在Android上要怎么实现呢?在Android系统中,目前主要有三种方式可以实现上图的形状,下面一一介绍。一、PorterDuffXfermode方式之前的博客曾经介绍过用这种方式画圆形头像,实际上,它不仅可以用来画圆形头像,还可以实现任意形状。首先来复习一下16中效果:1.PorterDuff.Mode.CLEAR原创 2017-09-27 10:46:11 · 10268 阅读 · 0 评论 -
Android Camera2 拍照(二)——使用TextureView
上一篇博文简单介绍了使用Camera2 API拍摄照片,并使用SurfaceView作为预览界面。实际上,相对于SurfaceView, TextureView更适合用于视频和拍摄照片。SurfaceView也有它的使用场合,这将在另外一篇中阐述。本文将使用TextureView作为预览界面,再次向大家展示Camera2 API的简单应用。1,定义TextureView作为预览界面在布局文原创 2017-09-01 10:06:55 · 8666 阅读 · 2 评论 -
Android实现自定义圆形ImageView
要实现圆形的ImageView,有一个重要的类:PorterDuffXfermode。PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint如何与已有的Canvas图像进行交互。该类的用法如下://创建PorterDuffXfermodePorterDuffXfermode mode=new Po原创 2017-08-30 12:07:04 · 962 阅读 · 0 评论 -
Android Camera2拍照(一)——使用SurfaceView
Camera2 API简介Android 从5.0(21)开始,引入了新的Camera API Camera2,原来的android.hardware.Camera被废弃(下面称为Camera1),还有一个android.graphics.Camera,这个android.graphics.Camera不是用来照相的,是用来处理图像的,可以做出3D的图像效果之类的,之前的Camera1则由原创 2017-08-31 09:56:20 · 12640 阅读 · 4 评论 -
Android WebView设置cookie
Android中WebView加载网页,有时候需要通过cookie想网页传递信息,这时候这样操作。首先设置接收cookie:CookieManager.setAcceptFileSchemeCookies(true);CookieManager.getInstance().setAcceptCookie(true);CookieManager.setAcceptFileScheme原创 2017-09-15 17:23:18 · 2575 阅读 · 0 评论