`

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,用的是http://www.eoeandroid.com/thread-30257-1-1.html上面的代码,其实上面那段话也是对它的修改。

首先,先写个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。
分享到:
评论

相关推荐

    美术中的信息化应用小析(全文).docx

    【美术中的信息化应用小析】 在当今信息化时代,教育领域也开始积极探索如何将信息技术融入传统教学,以提升教学质量,激发学生兴趣。美术教育也不例外。美术课程的信息化应用旨在打破传统教学模式,利用网络资源...

    小析绩效审计发展态势.doc

    小析绩效审计发展态势.doc

    基于极小析取范式的属性约简算法 (2012年)

    在深入分析了可辨识矩阵中可辨识集的特点及相互关系的基础上,优化改进决策辨识矩阵:①两对象之间不作逆向比较;②将决策可辨识矩阵列简化为属性等价类;③正域等价类作为决策可辨识矩阵的行,分情况给出了新决策表求取...

    渗透与WEB安全小析

    渗透测试和安全测试入门相关,扫盲安全测试;安全事,无大小;也许你的一个提醒,可以挽回公司的巨大损失

    滞销楼盘问题小析.doc

    在中国的房地产市场中,滞销楼盘是一个常见的问题,其中户型设计是影响销售的重要因素之一。本文将深入探讨滞销楼盘的户型设计问题及其解决方案。 首先,我们要明确的是,优秀的户型设计应当兼顾舒适性、功能性、...

    光伏并网微逆变器核心技术小析.pdf

    光伏并网微逆变器是太阳能发电系统中的关键设备,尤其在近年来,随着技术进步和市场需求,微逆变器逐渐受到广泛关注。与传统的集中式、串式和多串式逆变器相比,微逆变器有明显优势。它直接连接到每个光伏组件,确保...

    小析火力发电企业物流成本管理.doc

    【火力发电企业物流成本管理】是电力行业中一个关键的议题,尤其对于降低运营成本和提升企业竞争力至关重要。当前,火力发电企业在物流成本管理上存在一些主要问题: 1. **物流成本管理意识薄弱**:尽管现代物流...

    光伏并网微逆变器核心技术小析.docx

    光伏并网微逆变器是近年来在太阳能发电系统中逐渐受到重视的一种技术,尤其在提升系统效率和灵活性方面具有显著优势。相较于传统的集中式、串式和多串式并网逆变器,微逆变器直接连接到每个光伏组件,确保每个组件都...

    滞销楼盘问题小析DOC

    《滞销楼盘问题小析》是一份针对房地产行业中普遍存在的滞销楼盘现象进行深度剖析的文档。这份资料旨在提供一种理解和解决滞销楼盘问题的方法论,对于房地产开发商、投资者、销售团队以及相关行业从业者来说,都具有...

    大学健美操教育的问题与路径小析.doc

    \n\n通过以上措施,大学健美操教育有望克服现有挑战,更好地适应时代发展,满足学生的需求,推动健美操在大学校园中的普及和深入。同时,这也对提升大学生的体质健康和体育素养,以及培养他们终身运动的习惯具有重要...

    小波分析讲解与实例教学.rar_向小析_图像修复_实例讲解_小波分析_小波分析讲解

    对小波分析分讲解以及实例教学,可以实现,内附word说明

    唐人送别诗小析 (2003年)

    根据给定文件“唐人送别诗小析 (2003年)”的内容,我们可以从中提炼出关于唐代送别诗的一些重要知识点。 ### 一、唐代送别诗的特点 #### 1. 文字浅显,节奏舒缓 唐代送别诗的语言通常通俗易懂,如同日常交谈般自然...

    5°专场视觉设计小析

    网站的专场设计,应该算是网页视觉设计师的必修课,应该也算是最基本功。她所需要的设计理论都是最基本,但同时也是最重要的。设计理论版本多如牛毛,我这里仅仅整理5个方面来分析网页专场设计的一些方法,本人并非...

    Wifi,ZigBee和蓝牙大战小析资料下载

    智能家居被看作是下一个风口,但是近两年智能家居市场一直不温不火。一方面,很多智能产品并不能够抓住用户痛点,真正满足用户的需求,很多用户对此的接受度不高。另一方面,这个市场的格局还未形成, 无论是技术...

    论文研究-计算约简的差别矩阵简化算法不成立.pdf

    论文研究-计算约简的差别矩阵简化算法...实际应用中给出一种简化算法:一边从信息表中提取差别元素构成合取范式,一边用分配律、吸收律作逻辑公式的等价变换,直接得到最小析取范式.本章给出反例,说明该简化算法不总成立.

Global site tag (gtag.js) - Google Analytics