《Android和PHP开发最佳实践》一2.5 Android上下文

简介: 本节书摘来自华章出版社《Android和PHP开发最佳实践》一书中的第2章,第2.5节,作者 黄隽实,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.5 Android上下文

大家对上下文(Context)的概念并不陌生,在软件开发领域,它主要用于存储进程或应用运行时的资源和对象的引用,此外,我们在接触其他系统和框架的时候也经常会碰到上下文的概念。当然,对于Android应用来说,上下文是非常重要的,这部分的内容在Android应用的实际开发中也会经常使用到,因此本节将会重点介绍Android上下文的相关知识,为后面实战编程打下一定的基础。
在Android应用框架中,根据作用域的不同,可以把上下文分为两种,一种是Activity界面的上下文,即Activity Context;另一种是Android应用的上下文,即Application Context。下面我们分别介绍这两种上下文的概念和使用。

2.5.1 界面上下文(Activity Context)

界面上下文(Activity Context)在应用界面(Activity)启动的时候被创建,主要用于保存对当前界面资源的引用。界面上下文在Activity界面控制器类中被使用,当我们需要加载或者访问Activity相关的资源时,会需要用到该Activity的上下文对象。比如,我们需要在界面中创建一个控件,示例代码如清单2-10所示。
代码清单 2-10

public class TestActivity extends Activity {
...
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView mTextView = new TextView(this);
        label.setText("Test Text View");
        setContentView(mTextView);
    }
...
}

通过上面的代码片断,我们创建了一个文本框控件(TextView),并赋予该控件对应界面控制器(TestActivity)的上下文对象(this)。实际上,把界面控制器的上下文对象传递给控件,就意味着该控件拥有一个指向该界面对象的引用,可以引用界面对象占有的资源;同时,Android界面系统也将该控件绑定到该上下文指向的界面对象,最终组合并展示出来。
界面上下文(Activity Context)的生命周期跟Activity界面的是同步的,即当Activity被销毁的时候,其对应的上下文也被销毁了,同时,和该上下文有关的控件对象也将被销毁并回收。因此,我们也可以认为上下文可以用于串联Android应用之中的对象和组件,在理解了这点之后,在使用上下文的时候就不会迷惑了。此外,Context类中比较常用的方法如下。
getApplicationContext:获取当前应用的上下文对象,相关内容请参考2.5.2节。
getApplicationInfo:获取当前应用的完整信息并存于ApplicationInfo对象中,其中常用的信息包括包名packageName、图标icon以及权限permission等属性,更多属性可参考SDK中android.content.pm.ApplicationInfo类的说明。
getContentResolver:获取ContentResolver对象,用于查询所需的Content Provider提供的信息,更多知识请参考2.4.4节内容。
getPackageManager:获取PackageManager对象,PackageManager的用途比ApplicationInfo更加广泛,该类可以从系统的PackageManagerService中获取安装包和运行进程的信息,作用于系统范围。
getPackageName:获取包名,包名(packageName)可作为Android应用的唯一标识。
getResources:获取应用的资源对象Resources,该对象提供一系列的get方法来获取图形Drawable、字符串String以及视频Movie等资源。
getSharedPreferences:获取用于持久化存储的SharedPreferences对象,相关内容请参考2.6.1节。
getSystemService:获取系统级别服务的对象,Android应用框架为我们提供了丰富的系统服务,getSystemService方法就是用于获取这些系统服务对象并运用到应用开发中去。表2-4中列出了常用系统服务及其简单介绍,大家可以先了解一下。
image

界面上下文是Android应用开发中最经常被使用的上下文对象,应用界面中几乎所有的UI控件都需要用到,这一点在实际运用的过程中大家会体会得更深刻。

2.5.2 应用上下文(Application Context)

应用上下文(Application Context)在整个应用(Application)开始的时候被创建,用于保存对整个应用资源的引用,在程序中可以通过界面上下文的getApplicationContext方法或者getApplication方法来获取。在实际应用的时候,我们通常会把应用上下文当做全局对象的引用来使用。当然,对于不同的应用我们会定义应用对象来使用,如代码清单2-11所示。
代码清单 2-11

class TestApp extends Application {
...
    private String status;
    
    public String getStatus(){
        return status;
    }
    
    public void setStatus(String s){
        status = s;
    }
...
}

TestApp应用类继承自Application基类,定义了自己的状态变量和get/set方法,可在整个应用程序中进行设置和获取。当然,我们还需要在应用程序的配置文件AndroidManifest.xml中进行配置,如代码清单2-12所示。
代码清单 2-12

 android:icon="@drawable/icon" 
 android:label="@string/app_name">



配置完毕之后,在应用程序的Activity界面中就可以使用getApplicationContext来获取该应用的上下文对象来完成所需功能了,使用范例请参考代码清单2-13。
代码清单 2-13
class TestActivity extends Activity {
...
    @Override
    public void onCreate(Bundle b){
        ...
        TestApp app = (TestApp) this.getApplicationContext();
        String status = app.getStatus();
        ...
    }
... 
}

实际上,在Android应用框架中,android.app.Activity类和android.app.Application类都是从android.content.Context类继承而来的,这也是为什么可以在Activity和Application中方便地使用this来代替对应上下文的原因。当然,理解两种Android上下文的用法在Android应用编程中是非常重要的,因为只有理解了Android上下文才能比较完整地理解Android应用的运行环境,进而更好地控制应用的运行状态。另外,我们也会在第7章中通过实例来加深大家对Android上下文用法的理解。

相关文章
|
4天前
|
PHP Android开发
android通过http上传文件,服务器端用php写(原创)
android通过http上传文件,服务器端用php写(原创)
14 4
|
10天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
11天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
13天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
3天前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
|
3天前
|
物联网 Java 开发工具
安卓应用开发:打造未来移动生活
【5月更文挑战第10天】 随着科技的飞速发展,智能手机已成为我们日常生活中不可或缺的一部分。作为智能手机市场的两大巨头,安卓和iOS分别占据了一定的市场份额。在这篇文章中,我们将重点关注安卓应用开发,探讨如何利用先进的技术和创新思维,为用户打造更加便捷、智能的移动生活。文章将涵盖安卓应用开发的基本概念、关键技术、以及未来发展趋势等方面的内容。
|
5天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
12 0
|
6天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
16 1
|
6天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
13 0
|
7天前
|
Android开发
Android 盒子开发过程中遇到的问题及解决方法
Android 盒子开发过程中遇到的问题及解决方法
8 2