美文网首页
Android开发须知(1):Application conte

Android开发须知(1):Application conte

作者: 叶满林 | 来源:发表于2018-12-29 13:36 被阅读0次

现在算下来,在互联网公司已经实习两个月了,这两个月收获颇丰,有很多很多的东西值得去记。(嗯,绝对不是偷懒。干货都记本地了,等总结好了再发博客)

近期我准备开一个坑,就是写《Android开发须知》这个系列。因为在实习过程中,我发现在Android开发过程中有许多很小却很常见的“深坑”。不说是初来乍到的应届生,很多老司机会在这些地方翻车。写这个系列博客 一来,告诫自己在开发中要谨记这些小事情,避免犯错。二来,就是与各位准备开发Android的小伙伴进行探讨,避免踩坑。

言归正传,咋们从最常见的问题开始

Context开始讲起

什么是Context?Android为什么要用context?是我初学Android的困惑。
Context被翻译为“上下文”。这个概念表面看上去通俗易懂,实际上是“一万人就有一万个哈姆雷特”。在这里我表述一下我对context的看法,context就是一个Android系统的高级凭证,重要的类都必须拿凭证打开,不是什么阿猫阿狗都可以随便new出来的。就比如启动一个ACtivity:

 Intent intent = new Intent(context, MainActivity.class);
 context.startActivity(intent);

出于安全考虑,Android系统是不允许Activity凭空出现的。也就说,要持有context凭证才能去启动一个Activity。保证安全的、正确的开启下一个重要组件。

除了启动Android的四大组件以外,通过context还可以访问APK中的各种资源,访问Package的相关信息和各种权限管理。

比如去获取个版本名称

    PackageManager pm = context.getPackageManager();
    PackageInfo pi=pm.getPackageInfo(context.getPackageName(), 0);
    pi.versionName
Context的生命周期

铺垫完了,今天我们的两个主角登场:Activity context与Application context。
我们先来看一个Demo

public class Demo{
    private static Demo instance;
    private Context context;
    
    private Demo(Context context){
        this.context=context;
    }
    public getDemoInstance(Context context){
        if(instance == null){
            instance=new Demo(context)
        }
        return instance
    }
}

这是一个很简单的单例模式,单例模式的特殊性让它的生命周期和Application一样长,如果开始就传入一个Activity context,那么当这个Activity被销毁后,这个单例依然引用着它的context,使得Activity无法GC,导致内存泄漏。

Activity context跟Activity的生命周期是相关的,Activity可以销毁几次(反复开启),那么属于Activity的context就会销毁多次

而Application context的生命周期与Application相同,context随着Application的销毁而销毁,伴随application的一生。并与activity的生命周期无关.可以通过Context.getApplicationContext或者Activity.getApplication方法获取。

所以Context的生命周期不同,决定了context的使用不同。

Context的用法

1.把控context的生命周期:
使用context,要先明确使用的context生命周期长短。如果是工具类获取一些信息,就使用Application Context解决问题。如果是启动一个Activity就使用Activity context。

2.及时释放context:
如果我们必须使用Activity context让其他类持有,那么一定要记得在Activity的onDestroy()时或之前把给出的context置空。避免让“闲杂人等”长期持有。

相关文章

网友评论

      本文标题:Android开发须知(1):Application conte

      本文链接:https://www.haomeiwen.com/subject/lyrulqtx.html