Context是Android中一个非常重要的概念,用于访问全局信息,几乎所有的基础组件都继承自 Context,理解 Context 对于学习 Android 四大基本组件非常有帮助。

1. Context作用

新建一个LearnContext工程,看如何通过Context来进行资源的访问。

  1. public class MainActivity extends AppCompatActivity {
  2. private TextView tv;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. tv = new TextView(MainActivity.this); //可只写this
  7. // tv.setText("Hello Android");
  8. tv.setText(R.string.app_name); //利用资源的id传入一个字符串
  9. System.out.println(getResources().getText(R.string.app_name)); // 当前的avtivity是一个Context,所以直接通过getResources()获取资源
  10. setContentView(tv);
  11. }
  12. }

除了可以获取字符串资源外,它还可以获取只要工程文件里边存在任意类型的资源。比如说图片资源:

  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5.  
  6. ImageView iv = new ImageView(this);
  7. iv.setImageResource(R.mipmap.ic_launcher);
  8. setContentView(iv);
  9. }
  10. }

这样运行就会看到安卓机器人的图片了
Context作用:访问全局信息的接口,比如全局的字符串,图片资源等。

2. Application用途

多个组件之间数据共享,前面了解了Context可以作为全局信息的桥梁。
新建一个类App,让它继承至Application,配置AndroidMainfset:

  1. <application
  2. android:name=".App" //new add

通过这种方式,我们就自定义了 Android 的 Application 。而 Application 才是一个真正的全局上下文对象。

  1. App.java
  2. public class App extends Application {
  3. private String textData = "default";
  4. public void setTextData(String textData) {
  5. this.textData = textData;
  6. }
  7. public String getTextData() {
  8. return textData;
  9. }
  10. }

然后新建一个类 Main2 继承至 Activity,重写 onCreate()。添加注册信息:

  1. 把这个Activity也设置为启动的。
  2. <activity
  3. android:name=".Main2"
  4. android:label="Main2"> //同时将第一个Aty的label设为Main1。
  5. <intent-filter>
  6. <action android:name="android.intent.action.MAIN" />
  7. <category android:name="android.intent.category.LAUNCHER" />
  8. </intent-filter>
  9. </activity>

运行发现手机已经装了MainActivity和Main2,打开MainActivity为图片,打开Main2为空白。

接下来在layout文件夹中创建 main1.xml 和 main2.xml ,并绑定视图。

  1. MainActivity.java
  2. public class MainActivity extends AppCompatActivity {
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main1);
  7. }
  8. }
  1. Main2.java
  2. public class Main2 extends Activity {
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main2);
  7. }
  8. }

回到 main1.xml,拖进一个 PlainTextView,PlainText 和 Button:

  1. <TextView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:text="New Text"
  5. android:id="@+id/textView" />
  6. <EditText
  7. android:layout_width="match_parent"
  8. android:layout_height="wrap_content"
  9. android:id="@+id/editText"
  10. android:layout_gravity="center_horizontal" />
  11. <Button
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:text="保存"
  15. android:id="@+id/btnSaveData" />

拷贝一份到main2.xml使用相同布局,去到MainActivity.java

  1. public class MainActivity extends AppCompatActivity {
  2. private TextView textView;
  3. private EditText editText;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main1);
  8. textView = (TextView) findViewById(R.id.textView); //获取资源
  9. editText = (EditText) findViewById(R.id.editText);
  10. textView.setText("共享的数据是:"+getApp().getTextData());
  11. findViewById(R.id.btnSaveData).setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  1. //保存时获取Application,类型为自定义的App,获取信息保存到全局的Context里边
    ((App)getApplicationContext()).setTextData(editText.getText().toString());
  1. textView.setText("共享的数据是:"+getApp().getTextData());
  2. }
  3. });
  4. }
  5. public App getApp(){
  6. return (App) getApplicationContext();
  7. }
  8. }
同样的代码添加一份到 Main2.java 。
运行可以看到共享数据是 default,输入 wshlin ,点保存,可以看到共享数据变为 wshlin 。退出打开Main2,看到共享的数据为 wshlin,修改为kkk,退出打开Main,发现共享数据为 kkk。
也就是说,在多个 activity 里边,我们可以使用 Application 来进行数据的共享。因为 Application 对于同一个应用来说是唯一的。

====================================转载========================

作者:wshlin
链接:https://www.jianshu.com/p/cba902e68481
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android基础知识—Context理解及使用的更多相关文章

  1. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  2. Android基础知识巩固:关于PendingIntent和广播

    平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...

  3. Android基础知识(一)

    前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...

  4. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  5. android基础知识:SharedPreferences和PreferenceActivity

    1.android文件存储 对Android系统了解的都知道,Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvi ...

  6. Android基础知识学习

    IPC  (Inter-Process Communication) 意思是: 进程间的通信,是指两个进程之间进行数据交换的过程. Android中如何开启多进程呢? 只需要给四大组件(Activit ...

  7. C#基础知识之理解Cookie和Session机制

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  8. Android基础知识总结

    四大组件之一活动 活动状态 运行状态:活动处于栈顶 暂停状态:活动不处于栈顶,但仍然可见 停止状态:完全不可见 销毁状态:离开返回栈 生存期 onCreate() onStart():不可见到可见调用 ...

  9. Android基础知识-1

    1.Android的Activity任务栈 在Android的系统中,在APP运行时每个APP都会默认有一个任务栈,任务栈的名称以APP的包名命名.任务栈是一中先进后出的结构,APP中每一个调用的Ac ...

随机推荐

  1. Vue.js和Webpack

    Vue.js Vue简单介绍 是一个轻量级的渐进式框架,一个前端项目可以使用使用Vue.js的一两个特性也可以整个项目都用Vue.js,很方便实现项目的增量开发 Vue.js的使用:() 在html页 ...

  2. 阿里巴巴持续投入,etcd 正式加入 CNCF

    摘要: 2018 年 12 月 11 日,在 KubeCon + CloudNativeCon 北美峰会上,etcd 项目正式加入 CNCF. 2018 年 12 月 11 日,在 KubeCon + ...

  3. 2019 IEEEXtreme 13.0 Impact Factor 影响因子

    Impact Factor 题目大意 顾名思义,求影响因子.有 n 行 json 数据,第一行为期刊信息,后面为出版商出版的文章信息.   输入输出 点击查看详细 输入: 6 {"publi ...

  4. Reverses CodeForces - 906E (最小回文分解)

    题意: 给你两个串s和t,其中t是由s中选择若干个不相交的区间翻转得到的,现在要求求出最少的翻转次数以及给出方案. 1≤|s|=|t|≤500000 题解: 我们将两个字符串合成成T=s1t1s2t2 ...

  5. Codeforces 479【C】div3

    题目链接:http://codeforces.com/problemset/problem/977/C 题意:给你n个数字,输出任意一个数字,这个数字刚好大于等于,序列里面k个数字. 题解:排个序,第 ...

  6. VMware 安装android-x86系统。

    首先先安装 VMware 虚拟机,并下载 android-x86_64-8.1-r2.iso 系统. VMware安装完成后,打开VMware Workstation,单击“创建新的虚拟机”,或者在菜 ...

  7. 将数据写到kafka的topic

    package test05 import java.util.Propertiesimport org.apache.kafka.clients.producer.{KafkaProducer, P ...

  8. Flutter 类似viewDidAppear 的任务处理

    前言 在任务之中 ,有些实时任务比较重的需求,需要在类似 iOS viewDidAppear 里面执行数据请求任务,如:上一个页面返回pop 后执行网络请求任务.在flutter中如何实现呢?  目前 ...

  9. YARN框架与MapReduce1.0框架的对比分析

  10. Impala查询执行过程