`

Context的一些理解摘抄

 
阅读更多

其实,说白了,学过JavaWeb的应该知道域,我感觉这个Context就跟域相似,存在于整个应用中

 

 

Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。

  常规需要Context实例的方法主要有各种Service实现的类,比如说SensorManager在实例化时需要getSystemService(String)方法就必须由Context的实例执行,还有一些私有的文件系统I/O比如说openFileInput以及常用的Toast的makeText方法。

 

 

你的构造函数里面不是传入了一个上下文的对象吗?用它就行了啊。
Context是一个抽象对象,它的子类比较多,Activity就是它的子类,Service也是。

 

这样理解就很简单了:

一个APK进程只有一个Context: 这个Context就是ApplicationContext,从Context继承过来。

ApplicationContext可以看做是针对整个系统的全局处理接口,因为:
它负责和系统服务打交道
RPC通信由他通过那些XXXServiceManager和XXXService来处理。

其他一些模块,比如Activity,Service等,也是从Context继承而来的。
比如Acitivity在attach到主线程(ActivityThread)时,会用ApplicationContext来初始化这个Activity,这样就OK了。



比如Activity中StartService,调用过程如下:
Activity.StartService
(Activity继承自ContextWraper,实际会执行 ContextWraper中的)
public ComponentName startService(Intent service) {
        return mBase.startService(service);
    }

这里面的mBase实际就是ApplicationContext


ApplicationContext中的实现如下:
@Override
    public ComponentName startService(Intent service) {
        try {
            ComponentName cn = ActivityManagerNative.getDefault().startService(
                mMainThread.getApplicationThread(), service,
                service.resolveTypeIfNeeded(getContentResolver()));
            if (cn != null && cn.getPackageName().equals("!")) {
                throw new SecurityException(
                        "Not allowed to start service " + service
                        + " without permission " + cn.getClassName());
            }
            return cn;
        } catch (RemoteException e) {
            return null;
        }
    }

通过系统服务来做的。

总之:context就是将这些系统服务提供的功能,完美的包装起来了,其中的RPC过程,用户无需关心。好像这些功能就是在那,自己可以随便使用(要知道跨进程通信和调用,是非常难和麻烦的事情)。

 

分享到:
评论

相关推荐

    Context的理解1

    【Context的理解】 Context在Android开发中扮演着至关重要的角色,它是应用环境全局信息的接口,提供了与系统交互的各种方法,如启动Activity、广播、服务等。Context主要分为三类:Application、Activity和Service...

    android context理解

    ### Android Context深度解析 ...总之,`Context`在Android开发中扮演着至关重要的角色,正确理解和使用`Context`不仅能够提升应用的性能,还能有效避免常见的内存泄漏问题,确保应用的稳定性和效率。

    spring-context.jar

    spring-context-1.2.8.jar, spring-context-1.2.9.jar, spring-context-2.0-m2.jar, spring-context-2.0.1.jar, spring-context-2.0.2.jar, spring-context-2.0.4.jar, spring-context-2.0.6.jar, spring-context-...

    pascal context

    PASCAL Context,全称为PASCAL Context Dataset,是计算机视觉领域一个重要的数据集,尤其在语义分割和场景理解任务中占据着至关重要的地位。该数据集是PASCAL VOC(Visual Object Classes Challenge)的扩展,旨在...

    js中获取contextPath

    在Web开发中,`contextPath`是一个非常关键的概念,它代表了Web应用程序在服务器上的根目录路径。在Java Servlet环境中,`contextPath`是Servlet容器(如...理解并熟练掌握这一技巧,对于编写健壮的前端代码至关重要。

    Android的context使用

    总结来说,理解并正确使用Context是Android开发中的关键。通过合理传递和管理Context,我们可以有效地进行组件交互和服务调用,从而构建出功能完善的Android应用程序。在实践中,应避免不必要的Context持有,遵循...

    Android Context使用例子.

    `Context`的理解和正确使用对于编写健壮的Android应用至关重要。下面将详细介绍`Context`的基本概念、类型、常用方法以及在实际开发中的应用。 一、`Context`的基本概念 `Context`是Android框架中的一个基础类,它...

    通过反射获取Context实例的Demo

    使用反射获取Context虽然灵活,但也有一些潜在风险。过度使用反射可能会导致性能下降,因为反射操作比直接访问成员要慢。此外,依赖于私有API可能会导致代码在未来的Android版本中失效。因此,除非必要,应尽量避免...

    反射获取Context的实例

    在Android开发中,反射是一种强大的编程技术,它允许我们在运行时检查和操作类、接口、字段和...然而,需要注意的是,过度使用反射可能会导致代码难以理解和维护,且性能开销较大。因此,除非必要,否则应谨慎使用。

    Context的使用

    首先,我们需要理解`Context`的基本含义。`Context`可以被视为应用程序的环境或上下文,提供了访问系统服务、应用资源以及与用户交互的能力。在Android中,最常见的`Context`类型有`Application`、`Activity`和`...

    使用多个Context的CoreData

    一、理解NSManagedObjectContext NSManagedObjectContext是CoreData架构中的关键组件,它充当了应用程序与持久化存储之间的桥梁。每个MOC都有自己的内存中对象图,并负责跟踪这些对象的状态,如创建、更新或删除。...

    web.xml中</context-param>等配置的作用

    例如,我们可以在 <context-param> 中设置一些初始化参数,然后在监听类中使用这些参数来执行一些操作。 <context-param> 配置在 web 项目启动时发挥着关键的作用。它提供了一个初始化 web 项目的机会,可以在项目...

    android demo,BaseAdapter传递context的应用

    在Android开发中,`BaseAdapter`是一个非常关键的组件,它允许我们自定义ListView、GridView等控件的数据展示方式。...通过理解这些应用场景,我们可以更好地设计和实现自定义适配器,从而提高Android应用的用户体验。

    ORACLE中的sys_context函数

    以下是 sys_context 函数可以访问的一些常见参数: 1. 用户会话信息: * `SYS_CONTEXT('USERENV', 'SESSIONID')`:当前会话的 ID * `SYS_CONTEXT('USERENV', 'INSTANCE')`:当前实例的名称 * `SYS_CONTEXT('...

    通过反射拿到Context Demo

    首先,理解反射的基本概念。反射是Java提供的一种强大的机制,允许程序在运行时检查类、接口、字段和方法的信息,并能动态调用对象的方法或访问其属性。在Android中,我们可以利用反射来获取并操作类的私有成员,...

    Android Context与GetApplicationContext的区别及使用1

    Context可以理解为应用运行时的上下文环境,提供了对系统资源和组件的访问接口。本文将深入探讨Context的基本概念,以及在实际开发中常见的误解——ApplicationContext,并讨论Context的正确使用方式,特别是防止...

    谈谈Android里的Context的使用

    大家好,今天给大家分享一下Android里的Context的一些用法. 这里大致可以分为两种:一是传递Context参数,二是调用全局的Context. 其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml...

    Context jquery

    "Context jQuery"这个标题可能是指在使用jQuery时如何理解和操作上下文(Context)这一概念。 首先,理解jQuery中的“Context”至关重要。在JavaScript中,上下文通常指的是函数执行时的`this`关键字指向的对象。而...

Global site tag (gtag.js) - Google Analytics