(一)仅仅用ApplicationContext加载界面
需求描述:我需要在SDK中加载一个界面,界面是一次性的,不可见的,加载完后,获取到值,就立马销毁的。而客户端只能提供给你一个ApplicationContext。
通常,我们的界面加载都是在Activity中完成的。通过setContentView()来完成,或者通过LayoutInflater来加载。也或者通过addview的方式,将其依附到一个能被加载到的布局中去。但是,我们这里,不能这样做。
那么就从能得到的ApplicationContext 来分析一下。来看看activity的Context能干的事,ApplicationContext还能不能干?
大家注意看到有一些NO上添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?下面一个一个解释:
数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。
数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。
数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)
注:ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。
大家发现没有,好像Application的Context ,设计到界面的,都是NO呀?是的,图中展示给你的都是NO,但是,想一想,是不是漏掉了一个?什么东西?
Toast ,最常用的,往往也是最容易忽略的。
一起看看Toast为什么可以(去翻api http://www.android-doc.com/reference/android/widget/Toast.html)
用来这么久,你知道Toast是可以自己随便定义View的吗?有了这个,那还得确认Toast,能不能被Application的Context调用起来。再去翻API, 其实也可以手动做实验验证。
从Toast的Context点进去。
看到没?Application的Context是支持的。也就是说,我们这个需求,用Toast就可以来完成界面加载。
我这边的需求是,加载一个webview,由Webveiw来读取一些值。取值完成后,就销毁。
你也可以根据自己需要,来定制。