10 viclee108

尚未进行身份认证

我要认证

即使不能成为巨人,也要始终站在巨人的肩膀上

等级
TA的排名 4k+

一个常见Android崩溃问题的分析

这个错误大家应该都有遇到过:IllegalStateException: Can not perform this action after onSaveInstanceState。最近又遇到这个问题,就想要梳理一下其中的一些细节。 我的具体使用场景是在一个AsyncTask的回调onPostExecute中调用了FragmentTransaction的commit方...

2019-05-28 23:34:13

关于Java中Serializable的一些问题

在面试中我常常会考察Serializable相关的问题,我认为这是一个很基础的知识点,是对候选人基础是否扎实的考察。但是结果有点出乎意料,候选人往往只是知道它和序列化有关,而对于其中的细节以及更深层次的原理都不是很清楚。因此,我决定整理一下Serializable相关的一些问题,希望能够对不了解的同学有所帮助。 一个类实现Serializable接口后可以被序列化。这...

2019-05-15 00:04:48

SharedPreferences最佳实践

        Android开发中,我们经常会用到SharedPreferences,它是一种轻量的数据存储方式,通常用来存储一些简单的配置信息。看了网络上的一些文章,感觉都不是特别满意,因此希望能结合自己的经验和理解写一篇分析SharedPreferences的文章。本文不会讲解SharedPreferences的基本用法,而是会结合源码来分析SharedPreferences的工作原理,以及...

2019-01-08 23:48:13

Android视频开发基础(五)

       今天这篇文章我们来讲点实用的内容。我们在进行需求开发的同时,有时候也需要去排查一些问题,今天就来讲讲我们可以借助哪些工具来分析和处理视频文件。由于本人使用的是mac,讲解均以mac为例。       今天主要讲解的几个工具是ffmpeg、ffprobe、qt-faststart和AtomicParsley。 ffmpeg       ffmpeg是一套用来记录、转换音...

2018-12-23 23:04:02

Android视频开发基础(四)

       前面几篇文章介绍了视频技术中最基础的概念以及Android中关于视频处理的一些知识,这些都是Android视频功能开发必须掌握的基础。这一篇文章作为这个系列的第四篇,主要来介绍直播相关的概念。       在这篇文章中,你可以学习到以下内容:1.当前直播产品的现状和面临的挑战2.直播系统的整体架构是怎样的3.直播客户端的结构如何4.常用的直播协议有哪些,他们有什么...

2018-12-17 21:28:57

Android视频开发基础(三)

        接着之前两篇文章继续来讲Android视频开发这个主题。今天这篇文章,我们来聊一聊Android中MediaPlayer的DataSource。也许有的同学会觉得奇怪,DataSource有什么好讲的,我们直接调用MediaPlayer的setDataSource方法不就可以了。其实我们要讲的是更深层次的问题:怎么来干预视频播放器获取数据的过程。要解释这个问题,首先我们先来看看原生...

2018-12-07 17:06:14

Relinker源码分析

       作为源码分析的第一篇文章,我们先从一个相对简单的开源库开始:Relinker。这库由来已久了,github也有1000+的star。我在工作中虽然有用到这个库,却一直没仔细看过源码,今天我们就来分析一下。      开始之前先来讲讲背景。      开发中我们常常会遇到这样的异常:java.lang.UnsatisfiedLinkError: Couldn’t load ...

2018-12-03 10:23:55

Android视频开发基础(二)

       前一篇文章详细介绍了视频的一些基本概念,这些内容与Android系统本身没有密切关系,只是作为熟悉视频领域的一个基础,便于介绍接下来关于Android上视频处理的其他内容。继续来看Android上视频相关的内容。      Android支持的格式      先来看一下Android官网上给出的Android系统支持的文件格式。      从图中我们可以看到   ...

2017-03-20 23:34:06

Android视频开发基础(一)

        最近项目中实现了短视频的功能,主要包括视频的编辑处理、上传和播放。这是第一次真正略深入的接触视频开发,项目中接触到许多新的概念,也踩了很多坑,整体感觉视频处理还是十分复杂的知识体系,需要花大量的精力和时间才能很好的掌握这项技术。       下面就谈一谈其中涉及到的一些基础内容,也作为对之前工作的回顾。 基本概念码率       码率就是数据传输时单位时间...

2017-03-16 00:04:44

Android VideoView播放本地视频短暂黑屏的解决方法

       新的大版本终于正式发布了,整整三个月,做的心力交瘁,导致好久都没有更新文章了。最近接触了许多新的知识,也算是忙碌中有所收获。希望接下来的时间工作上能够稍微松缓一些,让我可以利用在家的闲余时间把一些内容整理总结,慢慢消化一下。今天首先来谈一谈前段时间遇到的一个关于ViewView的问题。        VideoView在Android视频播放中很常用,用法也比较简单。但是,我...

2017-03-14 21:34:24

Android匿名共享内存和MemoryFile

       今天要讲的内容相对冷门,日常开发中的使用率较低。但是,在某些场景下,它也许可以带给我们一个新的思路,帮我们解决一些棘手的问题,因此我觉得有必要谈一谈Android中的匿名共享内存(Ashmem)。       首先来看一下什么是匿名共享内存(Ashmem)。Ashmem是一种共享内存的机制,它利用了Linux的mmap系统调用,将不同进程中的同一段物理内存映射到进程各自的虚拟地址...

2016-11-14 21:10:48

浅析Python运算符重载

Python语言中提供了运算符重载功能,这一点与C++有点类似,却又和C++有些许多的不同。Python的运算符重载是通过重写一些Python内置的方法实现的。这些运算符方法都是以双下划线开头和结尾的,类似于__X__的形式,python通过这种特殊的命名方式来拦截操作符,以实现重载。当Python的内置操作运用于类对象时,Python会去搜索并调用指定的方法完成运算符操作。

2016-09-20 23:14:38

Android无法显示超大图问题的探索

       最近在做图片浏览功能时遇到了一个很蛋疼的问题,在开启硬件加速情况下,超大图无法正常显示(图的长宽有一个大于9000),而且程序不会crash,只是图片加载不出来,View显示为黑色。通过查看日志,发现系统打印出了下面的内容: W OpenGLRenderer( 4014): Bitmap too large to be uploaded into a texture (6...

2016-08-22 22:44:08

关于Base64编码的理解

       之前在很多业务中都有见过或者用到过Base64编码,但一直一知半解,没有对它有一个深入的认识和理解。今天就来聊一聊Base64编码的问题。       首先要明确的是,Base64是一种可逆的编码方式,提到编码方式,我们首先想到的肯定是Ascii、GBK、Unicode这些常用的编码方法,那么Base64与这些编码方式有什么不同呢?       简单来将,Base64就是一种...

2016-08-06 17:46:47

通过Python脚本读取apk信息

       本文将主要介绍通过Python脚本检测apk信息的功能,介绍具体的实现之前,首先介绍一个Android SDK中的开发工具aapt。       aapt即Android Asset Packaging Tool,我们可以在Android SDK的platform-tools目录下找到该工具。aapt可以查看、 创建、 更新ZIP格式的文档,也可将资源文件编译成二进制文件,And...

2016-07-23 21:47:48

Java单例模式——并非看起来那么简单

        Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。       单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯穿整个应用程序,而且起到了...

2016-07-20 23:48:19

深入理解Java的ThreadLocal

       Android中的多线程并发场景,通常是通过线程同步的方式去保证线程安全。对于共享资源,需要通过syncronized或者Lock等线程同步方法实现资源的互斥访问,才能确保数据访问的正确性。       今天要介绍的ThreadLocal为解决多线程并发问题提供了一种新思路。想必熟悉Java的同学对ThreadLocal并不陌生,今天我们就一起来探讨ThreadLocal。 ...

2016-07-18 22:19:27

Android RelativeLayout和LinearLayout性能分析

       LinearLayout和RelativeLayout是Android中最常用的两个布局容器,在分析它们的性能之前,我们先来看一个问题。       为什么使用Android Studio新建一个Blank Activity时默认的layout是RelativeLayout,而不是LinearLayout?       我觉得这是基于性能的考虑,使用 LinearLayout...

2016-05-22 14:32:58

贝塞尔曲线在Android中的应用

       今天要讲解的内容是Android中贝塞尔曲线的应用。可能很多人对贝塞尔曲线不甚了解,这里先对它的概念做一下简单介绍。       贝塞尔曲线由多个点组成:起始点、终止点以及0到n个相互分离的中间点。根据中间点的不同,可以分为线性贝塞尔曲线、二阶贝塞尔曲线、三阶贝塞尔曲线和高阶贝塞尔曲线。一般的矢量图形软件通过它来精确画出曲线,贝塞尔曲线由线段与节点组成,节点是可拖动的支点,线段像...

2016-05-14 21:25:38

Android中用到的设计模式

       Android系统使用Java语言进行开发,Android源码中设计模式的使用无处不在,以至于日常的开发中,也会根据不同的情况直接套用相应的设计模式。阅读Android源码的一大乐趣就是可以学习到Google大牛对设计模式的灵活运用。下面就来看一下Android系统都用了哪些常用的设计模式。模板方法模式       这应该是我们在Android开发中接触的比较早的设计模式。新...

2016-05-13 00:00:18

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。