
架构
文章平均质量分 82
hunter800421
这个作者很懒,什么都没留下…
展开
-
客户端日志打印规范
/ 正例:重写toString()方法,将实体类转换为JSON字符串@Override}原创 2022-08-13 01:46:04 · 1316 阅读 · 1 评论 -
sqlite锁机制和greenDAQ多线程
锁Android和iOS都是采用的sqlite作为默认数据库。在有并发业务的场景下,数据库需要提供锁机制来保证数据一致。sqlite3提供了五种级别的锁:未加锁(UNLOCKED)、共享 (SHARED)、保留 (RESERVED)、未 决(PENDING) 和排它(EXCLUSIVE)。SQLite 使用锁逐步上升机制,为了写数据库,连接需要逐级地获得排它锁,以最大限度的保证并发性。事务事务是与锁紧密关联的概念。SQLite有三种不同的事务,DEFERRED、 MMEDIATE和EXCLUSIVE,原创 2020-05-24 18:52:53 · 896 阅读 · 0 评论 -
基于kafka和prometheus的无线APM报警系统设计和实现
基于kafka和prometheus的无线APM报警系统设计和实现移动APP是当下的主流。公司有很多业务线,有大量的APP。为了能够实现对这些APP性能的监控,为无线开发、测试人员提供性能诊断和分析工具,公司自行开发了无线APM系统。我们的APM系统设计是这样的![avatar][apmbase64]无线APM系统通过移动端的SDK收集性能数据并上报到无线服务后端。各业务方可以通过无线控制...原创 2019-11-08 11:43:36 · 1054 阅读 · 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 · 830 阅读 · 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 · 834 阅读 · 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 · 398 阅读 · 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 · 2971 阅读 · 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 · 6418 阅读 · 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 · 535 阅读 · 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 · 2715 阅读 · 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 · 2363 阅读 · 0 评论 -
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 · 1254 阅读 · 0 评论 -
Proxy——代理模式
意图为其它对象提供一种代理以控制对这个对象的访问。适用性在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。下面是一些可以使用Proxy模式常见情况。1)远程代理(Remote Proxy):为一个对象在不同的地址空间提供局部代表。2)虚代理(virtual Proxy)根据需要创建开销很大的对象。3)保护代理(Protection Proxy)控制对原创 2017-05-22 21:16:05 · 23024 阅读 · 0 评论 -
创建者模式
概念创建者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。要素意图:将一个复杂的创建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决原创 2017-03-15 22:17:20 · 274 阅读 · 0 评论 -
阻塞/非阻塞/异步/同步
最近去面试,面试让我描述JAVA IO的三种方式:阻塞,非阻塞,异步。当时我有点儿懵了,异步怎么和阻塞,非阻塞并列了。阻塞和非阻塞是一组相对的概念,异步是和同步相对的概念。原创 2017-03-15 14:39:50 · 308 阅读 · 0 评论 -
桥接模式
意图将抽象部分与它的实现部分分离,使它们可以独立的变化。适用性以下情况可以使用桥接模式:不希望抽象和它的实现部分之间有一个固定的绑定关系。这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。对一个抽象的实现部分的修改应对客户原创 2017-03-21 15:29:23 · 368 阅读 · 0 评论