android中的Context

Android面试:来说一说Context吧,Android中的Context是什么?能干什么?怎么用呢? Context的中文翻译为:语境;上下文;背景;环境,在开发中我们经常说称之为“上下文”,那么这个“上下文”到底是指什么意思呢?在语文中,我们可以理解为语境,在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。比如微信聊天,此时的“环境”是指聊天的界面以及相关的数据请求与传输,Context在加载资源、启动Activity、获取系统服务、创建View等操作都要参与。那Context到底是什么呢?一个Activity就是一个Context,一个Service也是一个Context。 阅读详情

android中的Context到底该怎么用

      在Android系统中,有很多的service,也就是服务。我们的程序如果用到系统功能,一般都是调用服务间接完成的。也就是在Android系统中存在许多C/S架构。而context的作用,就是android应用连接service的桥梁。比如Activity中有一个方法,getSystemService()。这个方法调到最后,实际上是调用的ContextImpl的getSystemService()方法。而ContextImpl是对Context的实现。

      Context不是函数而是一个类——如果不太了解面向对象,可以把“类”看做一种数据类型,就像int,不过类型为“类”的数据(称为对象)可能储存远比int多的信息,比如这里的类型为Context的对象就储存关于程序、窗口的一些资源。

        有些函数调用时需要一个Context参数,比如Toast.makeText,因为函数需要知道是在哪个界面中显示的Toast。
        再比如,Button myButton = new Button(this); 这里也需要Context参数(this),表示这个按钮是在“this”这个屏幕中显示的。
        Android开发使用(纯粹的)面向对象语言,一切都是对象,就连我们写的函数都是对象的函数。
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this,
                "OK!",
                Toast.LENGTH_LONG).show();
        Button button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v)
            {
                Toast.makeText(MainActivity.this,
                        "Hello, world!",
                        Toast.LENGTH_LONG).show();
            }
        });
    }
}
      这里OnCreate就是MainActivity的对象的函数(MainActivity是类),所以这个函数中的this就表示当前的、包含这个函数的MainActivity对象。
      MainActivity extends Activity,意思是MainActivity 继承 Activity,即MainActivity 是 Activity 的一种,所有的MainActivity 都是 Activity。同样,在Android文档中Activity继承ContextThemeWrapper,ContextThemeWrapper继承ContextWrapper,ContextWrapper继承Context。所以this这个MainActivity也是Context,把this传入Toast.makeText表示“OK!”是在当前的MainActivity对象(也是Context)中显示的。
      对于显示"Hello, world!"的Toast.makeText,这个函数在onClick中,而onClick是new Button.OnClickListener(){...}这个没有名字的类的函数,this表示匿名类的对象,不表示MainActivity对象,所以这里用MainActivity.this,强制选择外面一层MainActivity的this。

 

Context相关类的继承关系:


********************************************************

Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、获取classLoader、获取资源等等。如果我们得到了一个包的Context对象,那我们基本上可以做这个包自己能做的大部分事情。

         那我们能得到吗?很高兴的告诉你,能!
      Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。


      这个方法有两个参数:
1。packageName  包名,要得到Context的包名
2。flags  标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。


      下面给个小例子,执行另外一个包里面的某个类的方法。
      另外一个包的包名是chroya.demo,类名Main,方法名print,代码如下:

Java代码 
  1. package chroya.demo;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6.   
  7. class Main extends Activity {  
  8.       
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.     }  
  13.       
  14.     public void print(String msg) {  
  15.         Log.d("Main", "msg:"+ msg);  
  16.     }  
  17. }  

       本包的调用Main的print方法的代码块如下:

Java代码 
  1. Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);  
  2. //载入这个类  
  3. Class clazz = c.getClassLoader().loadClass("chroya.demo.Main");  
  4. //新建一个实例  
  5. Object owner = clazz.newInstance();  
  6. //获取print方法,传入参数并执行  
  7. Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello");  

       ok,这样,我们就调用了chroya.demo包的Main类的print方法,执行结果,打印出了Hello。

      怎么样,这只是一个调用其他包的代码的例子,我们获取到Context,还可以做很多事情,当然,题目所说的坏事,还是不要做为好。

STM32驱动LED矩阵:IS31FL3731与查理复用技术实践 LED矩阵显示是嵌入式系统中常见的人机交互方式,其核心在于高效的驱动技术。查理复用(Charlieplexing)作为一种创新的矩阵扫描方式,通过引脚复用技术,用N个引脚驱动N²-N个LED,大幅提升了硬件资源利用率。IS31FL3731驱动芯片集成了这一技术,配合STM32F410RB微控制器的强大性能,可实现144个LED的精准控制。这种组合在艺术装置、信息展示等场景中展现出独特优势,既能呈现丰富的视觉效果,又能通过内置PWM调光实现256级亮度控制。通过I2C接口通信,开发者可以轻松实现字符显示、图像 阅读详情

相关推荐

SAP ABAP实战:用GN_DELIVERY_CREATE批量创建内部交货单的完整代码与避坑指南

本文详细介绍了在SAP ABAP开发中使用GN_DELIVERY_CREATE函数批量创建内部交货单的完整实现方案。通过数据结构设计、多源数据整合、批量处理逻辑和错误处理机制等核心环节的深入解析,帮助开发者高效完成物流单据自动化处理,特别针对VL31N/VL32N等常见场景提供避坑指南。

weixin_42116058的博客 343

android 输入文本,Android 在界面中显示以及输入文本信息 TextView和EditText

packagecom.example.textviewedittext;importandroid.support.v7.app.ActionBarActivity;importandroid.support.v7.app.ActionBar;importandroid.support.v4.app.Fragment;importandroid.os.Bundle;importandroid.vi...

weixin_32442555的博客 696

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2576

Android显示系统详解

一、显示系统的分类: 我们来思考一个问题:从普通用户角度来说,某个APP页面(例如购物APP首页)是怎么被显示到屏幕的? 首先看到的是物理屏幕,然后是屏幕中软件工程师编写的APP页面,也就是手机屏幕驱动+应用APP,能看出来必然要有一个中介将应用APP图像数据传递渲染到屏幕的驱动,投递到硬件屏幕去显示,这就是Android框架的作用,称之为Android显示系统模块。也就是说能分为以下几块: 1、硬件屏幕+驱动(我就知道个汇顶),驱动节点是 /dev/graphics/fb*,(fb0代表第一个moni

dream_caoyun的博客 5516

学习笔记【Day 20】鸿蒙PC应用在SD WAN MSTP场景用CodeArts test工具测试过程

多生成树协议(MSTP)作为二层网络高可靠、无环路的核心技术,其在鸿蒙 PC 上的兼容性与稳定性测试尤为重要。本文结合华为云 CodeArts TestPlan 全流程测试管理平台,详细拆解鸿蒙 PC 端 MSTP 功能的测试设计、环境搭建、执行验证。1.测试左移,保障迭代效率CodeArts TestPlan 将 MSTP 测试从后期集成阶段 “左移” 至开发早期,通过可复用用例库与自动化脚本,支持每次代码提交后的快速回归测试,避免网络功能稳定性因迭代被破坏。2.平台化工具破解复杂场景测试难题。

aiyijianghe的博客 1057

别再乱删文件了!修复Print Spooler服务自动停止的3个关键检查点(附Win10/Win11实测)

本文深入解析Windows系统中Print Spooler服务自动停止的常见原因及修复方法。从第三方驱动冲突、权限与服务依赖关系到打印队列积压,提供3个关键检查点的详细排查步骤,帮助用户彻底解决打印服务异常问题,适用于Win10/Win11系统。

weixin_31569671的博客 672

Android常用知识点总结

一、选择题 1.Android项目中的主题和样式资源,通常放在(C)目录。 A、res/drawable B、res/layout C、res/values D、assets 2.Dalvik虚拟机属于Android系统架构中的(C)。 A、应用程序层 B、应用程序框架层 C、核心类库层 D、Linux内核层 3.Android中短信、联系人管理、浏览器等属于Android系统架构中的(A)。 A、应用程序层 B、应用程序框架层 C、核心类库层 D、Linux内核层 4.下列属性中,用于设

WGL的博客 5575

LLM评测框架Ragas:测试RAG的性能出现TimeoutError()的解决办法(Ragas+langchain+ollama)

无奈之下,自己找到了一个解决办法,在ragas支持的llm类库中加了一个如下的类,支持ollama、langchian_ollama使用ragas测试报错的问题。可以将如上的库放到你的ragas的系统库的llms目录下,然后修改__init__.py如下。最近用ragas测试rag的性能,发现老出现TimeoutError()的错误。这是一个临时的解决办法,具体等待官方给出最终的解决方案。后来发现官方也没有尽快支持的计划。然后就可以用如下代码进行一些验证。

Criss@陈磊 665

android 显示消息框的方法

在android开发中,显示消息框有多种方法。 一、使用Toast显示提示信息框 Toast是一种非常方便的提示消息框,他会在程序界面上显示一个简单的提示信息,这个提示信息框用于向用户生成简单的提示信息,它具有两个特点。    1.       Toast提示信息不会获得焦点,  2.       Toast提示信息过一段时间会自动消失    使用Toast来生成提示消息也非常简单,只要

jackyhuangch的专栏 2万+

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

【AI智能体】飞书 AI 智能客服机器人搭建与使用实战操作详解

飞书 AI 智能客服机器人搭建与使用实战操作详解

congge 6049

安卓实现注册并将信息显示在页面

一、页面布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_wi...

CodeJR 4676

Python实现PDB文件预处理

蛋白质结构研究依赖PDB文件存储的三维结构数据,但原始文件常含无关的水分子、离子和非标准残基等干扰信息。本文介绍了一个基于BioPython的Python预处理脚本,可自动清理PDB文件,主要功能包括:1)移除短于阈值的蛋白质链;2)过滤非标准氨基酸;3)可选保留水分子和金属离子。该脚本逻辑清晰,支持批量处理,能显著提升结构比对、分子对接等分析前的数据准备效率,为后续生物信息学研究提供更纯净的结构数据基础。

Protein Designer的博客 568

安卓中的Context

Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的 实例为Activity,而到了一个button的onCli

u011045817的专栏 1139

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 中的context

1234567891011/***/......Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文该类实现了Context类的所有功能。= null) {............6.Context个数。

u012627628的博客 981

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android 中的 Context 到底是什么 ?

什么是 Context ? 在Android平台上 , Context 是一个基本的概念,它在逻辑上表示一个运行期的“上下文”。在Android平台上,应用里的每个重要UI界面都用一个小型上下文来封装, 而每个重要的对外服务也都用一个小型上下文封装。这些小型上下文都容身到一个Android大平台上, 并由Android统一调度管理, 形成一个统一的整体。 Context的行为 Context体现到...

XFORG1992的博客 955

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android中的context是什么

Context字面意思是上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄。很多方法需要通过 Context才能识别调用者的实例:比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onCli

form88的专栏 588

Android面试:来说一说Context吧,Android中的Context是什么

外链图片转存中…(img-OEMPno85-1711638173083)]

2401_83974199的博客 975

Android中的context

词典中Context的英文解释是上下文;语境;环境;背景;情境。  在Android程序中,它指应用当前状态的运行环境。它可以让新创建的对象理解当前是什么状态,应用在进行着什么。 通常,我们调用它来获得程序的其他信息(Activity,package/application等)。 我们可以通过调用getApplicationContext(), getContext(), g

xuuwee的专栏 291

Android中的Context

Context是一个抽象类,它提供了一系列关于应用程序环境的全局信息,允许访问应用程序的资源和类,以及调用应用程序级别的操作,如启动Activity、发送广播和接收Intent等。它是连接应用程序与Android系统之间的桥梁,通过Context,应用程序可以获取到系统服务、访问应用资源、进行跨组件通信等。

Dingdangr的博客 2658

安卓中的Context是什么?

在安卓开发中,Context是一个非常重要的概念。它提供了对应用程序可用资源集的访问,使对象能够了解应用程序的环境和设备设置。许多安卓的API都需要Context作为参数,ActivityService等类都继承自Context。

qq_29715355的博客 675

android中的this,Context到底该怎么用

     在Android系统中,有很多的service,也就是服务。我们的程序如果用到系统功能,一般都是调用服务间接完成的。也就是在Android系统中存在许多C/S架构。而context的作用,就是android应用连接service的桥梁。比如Activity中有一个方法,getSystemService()。这个方法调到最后,实际上是调用的ContextImpl的getSystemServ...

hljqfl的专栏 6228

浅谈 Android 中的 Context

一、Context 简介 Google 正式推出 Kotlin 前,主流 Android 应用都是使用 Java 语言来编写的。那么大家有没有思考过,一个 Android 程序和一个Java 程序,他们的区别在哪里?划分界限又是什么呢?其实简单点分析,Android 程序不像 Java 程序一样,随便创建一个类,写个 main() 方法就能运行了,而是要有一个完整的 Android 工程环境。在...

明华的博客 439

解析Android中的Context

理解上下文 Context Context 也就是上下文对象,是 Android 常用的类,但是对于 Context ,很多人都停留在会用的阶段,本文将带领大家从源码的角度来分析 Context ,从而更加深入地理解它。本文基于Android8.1.0系统分析Context。 1.Context 的关联类 Context 意为上下文,是 个应用程序环境信息的接口。 在开发中我们经常使用 Context ,它的使用场景总的来...

lixiong0713的博客 1万+

Android Application中的Context和Activity中的Context的区别

通过继承关系可以看到,Context直接子类为ContextIml(具体实现类)和ContextWrapper(上下文功能包装类),而ContextWrapper又有三个子类,分别是ContextThemeWrapper、Service和Application。基于Activity和Service、Application不在一个继承层级里,而是又继承了ContextThemeWrapper。

2401_84520182的博客 888
上一篇: android开源项目下载代码的方法
下一篇: android开源项目收集总结
freemindhack
博客等级 码龄13年 53粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值