重新认识Android
首先我们来看下源码中源于Activity的定义:
- public class Activity extends ContextThemeWrapper
- implements LayoutInflater.Factory2,
- Window.Callback, KeyEvent.Callback,
- OnCreateContextMenuListener, ComponentCallbacks2 {
- ...
- }
下面我们来详细分析每一部分的具体意义:
extends ContextThemeWrapper表示Activity本质上是一个ContextThemeWrapper,而ContextThemeWrapper具体是什么呢?看ContextThemeWrapper在源码中的定义:
- public class ContextThemeWrapper extends ContextWrapper {
- ...
- }
可见ContextThemeWrapper是一个ContextWrapper,继续往下看:
- public class ContextWrapper extends Context {
- Context mBase;
- ...
- }
ContextWrapper本质上是一个Context,context 的定义如下:
- public abstract class Context {
- ...
- }
整体结构如下图所示(图引用自:http://blog.csdn.net/qinjuning/article/details/7310620):

Context是一个抽象类,因此可以知道Activity其实就是一个Context,并实现了一些接口,如何理解Context呢?
Context 俗称上下文,在很多对象定义中我们都用到了Context,例如ImageViewimageView = new ImageView(this); 这里的this就是当前Activity所在的Context,源码中对Context的解释如下:
Interface to global information about anapplication environment. This is an abstract class whose implementation isprovided by the Android system. It allows access to application-specificresources and classes, as well as up-calls for application-level operationssuch as launching activities, broadcasting and receiving intents, etc.
Context只是一个接口,真正实现Context功能的是ContexImpl类,为了了解Context具体有什么作用,我们先来了解下Context中定义了哪些接口:
- public abstract ComponentNamestartService(Intent service);
- public abstract boolean stopService(Intentservice);
- public abstract void startActivity(Intentintent);
- public abstract void sendBroadcast(Intentintent);
- public abstract Intent registerReceiver(BroadcastReceiverreceiver, IntentFilter filter);
- public abstract Resources getResources();
以上是Context众多接口中的一个片段,看着接口是不是很熟悉?其实我们经常用到的一些函数其实都是在Context中定义的,因此Context可以被认为是用来封装一下通用功能的一个类,当然这个类不仅仅是针对Activity,最常见的service也是继承自Context,以及一大堆类都继承自Context,具体可参考:http://developer.android.com/reference/android/content/Context.html,关于Context的具体介绍可参考:http://blog.csdn.net/qinjuning/article/details/7310620
ContextWrapper仅仅是对Context的简单封装,如果要对Context修改,我们只需要修改ContextWrapper,而不需要对通用的Context进行修改,ContextWrapper的目的仅此而已。而ContextThemeWrapper只是在ContextWrapper的基础上加入了Theme相关的一些内容,对于Activity来说需要处理一些Theme相关的东西,但是对于Service来说只需继承ContextWrapper,因为Service不需要处理Theme相关的内容。
分析完extends部分,我们再来看下implements部分,extends决定了Activity的本质,implements部分可以认为是对Activity的扩展。
- LayoutInflater.Factory:通过LayoutInflater来inflate一个layout时的回调接口
- Window.Callback: Activity 靠这个接口才有机会对消息进行处理,这部分涉及到消息的传递,以后将专门介绍。
- ComponentCallbacks2:定义了内存管理的接口,内存过低时的回调和处理处理接口
- KeyEvent.Callback:键盘事件响应的回调接口,例如onKeyDown()等
- OnCreateContextMenuListener:上下文菜单显示事件的监听接口,通过实现该方法来处理上下文菜单显示时的一些操作
通过以上分析,我们大概了解了Activity具体是什么了,这对以后理解Activity应该能带来一定的帮助。

Examples of android:scaleType attribute.
Top row (l-r) center, centerCrop,centerInside.
Bottom row (l-r): fitCenter, fitStart, fitEnd, fitXY.
- VuDroid (Based on MuPDF) Review on Open-App
- APV (based on MuPDF)
- PDF-Annotation (Based on APV, MuPDF) appears to be the only OS app with annotation abilities, and they're not confirmed to work.
- Android PDF Viewer (Based on Sun's pdf-renderer)
- eBookDroid (Based on VuDroid, MuPDF))
- DroidReader (Based on MuPDF)
- APDFViewer (Based on Poppler, xpdf)
- iPDF View (Based on APV, MuPDF)
- Perfect Viewer plugin
ActionBar

重新认识Android的更多相关文章
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 配置android sdk 环境
1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/
- Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记
以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...
- Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记
以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- Android Studio 多个编译环境配置 多渠道打包 APK输出配置
看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- Android UI体验之全屏沉浸式透明状态栏效果
前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...
随机推荐
- HyperV上的Linux虚拟机启动报panic_early_exception错误
在Windows Server 2012服务器上的HyperV安装的Oracle Linux 6.4版本,在增加内存容量后(有16G升至30G),操作系统无法启动.黑屏并报"PANIC: e ...
- 深入浅出数据分析 Head First Data Analysis Code 数据与代码
<深入浅出数据分析>英文名为Head First Data Analysis Code, 这本书中提供了学习使用的数据和程序,原书链接由于某些原因不 能打开,这里在提供一个下载的链接.去下 ...
- YHLMR007 服装PDA验货差异报表
*********************************************************************** * Title : YHLMR007 * * Appli ...
- canvas实现类似弹窗广告效果
先看看下面的效果图,想想使用canvas是怎样实现的? 如下图: 这个就不详细描述了,看代码就会了. <!doctype html> <html lang="en" ...
- viewpager接受值图片轮播
package com.baway.test; import java.util.ArrayList;import java.util.List;import java.util.Timer;impo ...
- ASP.NET 下拉列表绑定枚举类型值,不用再新建一个枚举表
public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArg ...
- 网站tomcat配置
<?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF ...
- Android分享中,如何过滤指定的应用,并且对不同的分享方式发送不同的内容?
网上找到的一篇关于: 针对不同的应用,使用不同的方式的文章.原文地址 String contentDetails = ""; String contentBrief = " ...
- .NET EXCEL NPOI 图片
今天闲来无事写了下 “ .NET 用 NPOI 组件 将 图片文件 写到 EXCEL 中 ” 先看效果: 头是我加的,这个应该不是难事! 再看代码: private void button1_C ...
- windows下用一台机器配置分布式redis(主从服务器)
目录1.Replication的工作原理2.如何配置Redis主从复制 1.Replication的工作原理在Slave启动并连接到Master之后,它将主动发送一条SYNC命令.此后Master将启 ...