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

1. Context作用

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

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

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

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); ImageView iv = new ImageView(this);
iv.setImageResource(R.mipmap.ic_launcher);
setContentView(iv);
}
}

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

2. Application用途

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

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

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

App.java
public class App extends Application {
private String textData = "default";
public void setTextData(String textData) {
this.textData = textData;
}
public String getTextData() {
return textData;
}
}

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

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

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

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

MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
}
}
Main2.java
public class Main2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
}
}

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

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_gravity="center_horizontal" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:id="@+id/btnSaveData" />

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

public class MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
textView = (TextView) findViewById(R.id.textView); //获取资源
editText = (EditText) findViewById(R.id.editText);
textView.setText("共享的数据是:"+getApp().getTextData());
findViewById(R.id.btnSaveData).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//保存时获取Application,类型为自定义的App,获取信息保存到全局的Context里边
((App)getApplicationContext()).setTextData(editText.getText().toString());
 textView.setText("共享的数据是:"+getApp().getTextData());
}
});
}
public App getApp(){
return (App) getApplicationContext();
}
}
同样的代码添加一份到 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. break , continue 和 标签 跳出循环

    break跳出代码块或循环 var i = 0: while ( i <= 10){ console.log(' i '); i ++; if ( i === 5 ) break; }// 0 ...

  2. 移动Windows开始按钮到任务栏中的任何位置

    uses CommCtrl; procedure TForm1.Button1Click(Sender: TObject); var vHandle: THandle; vCount: Integer ...

  3. python入门 集合(四)

    集合 集合是一个无序的不重复元素序列,可以迭代,也可以修改.集合迭代的时候元素是随机的. 集合通常用来 membership testing, 去重, 也可以用来求交集并集补集. 介绍一下如何创建集合 ...

  4. DLL注入技术之依赖可信进程注入

    DLL注入技术之依赖可信进程注入 依赖可信进程注入原理是利用Windows 系统中Services.exe这个权限较高的进程,首先将a.dll远线程注入到Services.exe中,再利用a.dll将 ...

  5. Java-Class-I:java.util.Map

    ylbtech-Java-Class-I:java.util.Map 1.返回顶部 1.1. import java.util.HashMap; import java.util.Map; 1.2. ...

  6. console.log("正常-普天数据已调用");

    console.log("正常-普天数据已调用");

  7. LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)

    题目标签:Linked List 题目给了我们一组 linked list,让我们把每对nodes 互换位置. 新键一个dummy node,然后遍历list,每次建立 s1 和 s2 记录两个点,然 ...

  8. Maven详解()-- 常用命令

    Maven常用命令: Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ 一,Maven常用命令: ...

  9. Ehcache3.x学习(二)分层的选项

    Ehcache支持分层缓存的概念. 当想缓存堆内存以外的空间时,会发生下面的事情: 1.将数据添加到缓存意味着必须序列化key和value. 2.从缓存中读取数据意味着可能必须反序列化key和valu ...

  10. Day 9 :初识函数

    Python函数:1.函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 2.函数能提高应用的模块性,和代码的重复利用率. Python提供了许多内建函数,比如print().但你也可 ...