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. windows10 自动配置切换IP

    办公室与家里的ip网段不一样.每次都要来回修改本地无线WLAN IP段.写了个脚本bat,自动配置WLAN IP,方便切换. 建立 auto-set-ip.bat,保存格式需为ANSI,否则中文会乱码 ...

  2. 网站数据采集|埋点设计|nginx日志文件

    数据获取的方式主要可以分为两种: 1.网站日志文件(log files) 页面埋点js自定义的采集. 优缺点: web服务器自带的日志记录功能:优点方便,缺点信息收集不全 自定义的js埋点收集:优点想 ...

  3. NX二次开发-UFUN工程图插入PNG图片UF_DRF_create_image_from_file

    #include <uf.h> #include <uf_drf.h> UF_initialize(); //插入PNG char* file_name = "D:\ ...

  4. csp-s模拟测试94

    csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...

  5. 牛客多校第六场 G Is Today Friday? 蔡勒公式/排列

    题意: 有一堆日期,这些日期都是星期五,但是数字被映射成了字母A~J,现在让你求逆映射,如果存在多种答案,输出字典序最小的那个. 题解: 用蔡勒公式解决关于星期几的问题. 对于映射,可以用笔者刚刚学会 ...

  6. 事件绑定addEventListener

    通过addEventListener监听函数实现的dom事件绑定 addEventListener可以为当前dom添加一个事件(这个事件可以是个已有的事件),这就无法避免我们在写代码的时候重复去绑定同 ...

  7. 转-Windows下anaconda简单使用教程

    转自:https://www.cnblogs.com/Dota-wiki/p/7871838.html Anaconda is a completely free Python distributio ...

  8. Java-Class-@I:org.springframework.validation.annotation.Validated

    ylbtech-Java-Class-@I:org.springframework.validation.annotation.Validated 1.返回顶部   2.返回顶部 1. package ...

  9. 简单实用的makefile

    简单的makefile 为了说明问题,就新建一组文件如下: 文件布局及运行结果: make clean 按目录归置 文件看起来是是清楚了,但是makefile写得揪心. 实用版 (1)Makefile ...

  10. 20130313 word 公式与文字对齐

    1. 就是这儿 然后是这儿 2.这种错误很可能就是进入了死循环 3.复习了字符串现场编写 1.strstr(const char *string, const char *substring):查找s ...