Android编程中context及全局变量实例详解
作者:傲慢的上校 发布时间:2023-11-17 05:58:40
本文实例讲述了Android编程中context及全局变量的用法。分享给大家供大家参考,具体如下:
今天在研究context的时候,对application和activity context有了一定的了解,下面是从网上复制过来的资料
Application context和Activity context的区别:
这是两种不同的context,也是最常见的两种。第一种中context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,伴随application的一生,与activity的生命周期无关。第二种中的context跟Activity的生命周期是相关的,但是对一个Application来说,Activity可以销毁几次,那么属于Activity的context就会销毁多次。至于用哪种context,得看应用场景,个人感觉用Activity的context好一点,不过也有的时候必须使用Application的context。application context可以通过Context.getApplicationContext或者Activity.getApplication方法获取。
还有就是,在使用context的时候,小心内存泄露,防止内存泄露,注意一下几个方面:
1. 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的
2. 对于生命周期长的对象,可以使用application context
3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化
现在回到正题,说一下android全局变量,在平时的开发过程中,有时候可能会需要一些全局数据,来让应用中的所有Activity和View都能访问到,大家在遇到这种情况时,可能首先会想到自己定义一个类,然后创建很多静态成员,android已经为我们提供了这种情况的解决方案:
在Android中,有一个Application类,在Activity中可以使用getApplication()方法获得实例,使用它就可以获得当前应用的主题、资源文件中的内容等,这个类更灵活的一个特性就是可以被继承,来添加自己的全局属性。例如开发一个游戏,需要保存分数,那么我们就可以继承Application,下面是个demo供大家参考
首先,先写个Application的子类:
import android.app.Application;
public class GameApplication extends Application {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
然后在manifest.xml文件里面修改:
<application android:name=".GameApplication" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DemoActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ResultActivity"></activity>
</application>
注意到添加了android:name=".GameApplication" 。
修改完了以后,再往下看:
public class DemoActivity extends Activity {
public Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button);
((GameApplication)getApplication()).setScore(100);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(DemoActivity.this, ResultActivity.class);
startActivity(intent);
}
});
}
}
在这个activity里面设置了分数,我们可以在别的activity里面取出来:
public class ResultActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
TextView tv=(TextView)findViewById(R.id.tv);
int score=((GameApplication)getApplicationContext()).getScore();
tv.setText("你的成绩是:"+score);
}
}
这只是个简单的例子,当然,想要完成以上功能,使用intent传值就可以了,这样还显得麻烦,但是,如果有很多activity,使用这种方法就会发现很有用,是不是使用sharepreference也可以完成类似功能呢,可以,但是,效率方面就要比这个差很多了,sharepreference主要是用来存储数据,你可以退出程序时把所需要保存的简单数据保存到sharepreference里面,当然复杂的数据,还得使用sqllite。
希望本文所述对大家Android程序设计有所帮助。


猜你喜欢
- 目录不含return的执行顺序finally子句含return的执行顺序返回类型是对象类型时值的变化结论不含return的执行顺序执行顺序为
- 本小节内容不多,但是个人感觉比较独立,还是拿出来单讲吧。在开发 IntelliJ Plugin 时,如果需要用到 Gson、OKHttp 等
- 我就废话不多说了,大家还是直接看代码吧~private LineRenderer line;//画线line = this.gameObje
- 我们有一个TextView,其里面的内容是可以通过代码动态改变的,我们想用一张图片作为TextView的背景,实现类似于手机QQ对话中的气泡
- 一、简介众所周知,值类型变量不能null,这也是为什么它们被称为值类型。但是,在实际的开发过程中,也需要值为null的一些场景。例如以下场景
- 要用TextView使用渐变色,那我们就必须要了解LinearGradient(线性渐变)的用法。LinearGradient的参数解释Li
- 为了解放程序员的双手,减少重复性代码的编写,推荐使用插件:mybatis-plus-generator 进行代码自动生成。下面我将详细介绍通
- 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运
- Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人
- 实现效果图:下面是具体代码,可直接复制:package com.lcw.rabbit.widget;import android.anima
- 概述Selenium是一款免费的分布式的自动化测试工具,支持多种开发语言,无论是C、 java、ruby、python、或是C# ,你都可以
- Pre本篇博文我们开始梳理下Spring 提供的测试解决方案。对于 Web 应用程序而言, 一个应用程序中涉及数据层、服务层、Web 层,以
- 第一种方法:一、测试如下,直接设置小圆点不是图标二、准备工作1.在drawable创建dot.xml,设置小圆点,比较方便<?xml
- 本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下话不多说先上效果前言写这个音乐播放器实在是迫不得已。因为我们
- C# 中 PadLeft ,PadRight的用法简单来说就是给字符串实现补位。如:String.PadLeft(5,'0'
- 在使用Java web开发的后端工程师们大多会使用Maven作为项目构建以及编译的工具,微服务和大中台当道的今天,更加关注maven的细节是
- 本文告诉大家简单的方法进行时间计算。实际上使用 TimeSpan 可以做到让代码比较好懂,而代码很简单。例如我使用下面的代码表示 5 秒co
- 本文实例为大家分享了Java实现员工管理系统的具体代码,供大家参考,具体内容如下本系统主要练习到的相关内容: 1、 流程控制语句 2、 类、
- 讲解之前需要说明的是旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕手动设置屏幕:我们自己去调用Activity的 setReque
- java计算对数和指数public static void main(String[] args) throws InterruptedEx