<dl id="opymh"></dl>

<div id="opymh"></div>
      <div id="opymh"><tr id="opymh"></tr></div>

        <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

        <em id="opymh"></em>

        <em id="opymh"><ol id="opymh"></ol></em>

              频道栏目
              首页 > 程序开发 > 移动开发 > Android > 正文
              Android在无需配置Application的情况下全局获取Context的类的方式
              2018-07-30 15:31:47         来源:?#23616;?#24180;华  
              收藏   我要投稿

              使用 Context 的场景就不必多说了,Toast 啊、广播啊、通知啊等等等等,当然一般来说我们都是通过配置 Application 来获取全局的上下文实例,这也是应有之义,这里也写一下好了:

              public class AppContext extends Application {
              
               private static Context instance;
              
               @Override
               public void onCreate() {
                super.onCreate();
                instance = getApplicationContext();
               }
              
               public static Context getContext() {
                return instance;
               }
              }

              然后在 Manifest 中 application 标签下添加 name 属性

              android:name="xxx.xxx.xxx.AppContext"

              一般而言就是上述这样了,接下来要说的是碰到一些特殊情况无法配置 Application,这时要获取全局 Context 该如?#25991;亍?/p>

              通过 Applications 类获取全局上下文。

              先上代码:

              public class Applications {
              
               @NonNull
               public static Application context() {
                return CURRENT;
               }
              
               @SuppressLint("StaticFieldLeak")
               private static final Application CURRENT;
              
               static {
                try {
              Object activityThread = getActivityThread();
              Object app = activityThread.getClass().getMethod("getApplication")
                .invoke(activityThread);
              CURRENT = (Application) app;
                } catch (Throwable e) {
              throw new IllegalStateException("Can not access Application context by magic code, boom!", e);
                }
               }
              
               private static Object getActivityThread() {
                Object activityThread = null;
                try {
              @SuppressLint("PrivateApi") Method method = Class.forName("android.app.ActivityThread")
                .getMethod("currentActivityThread");
              method.setAccessible(true);
              activityThread = method.invoke(null);
                } catch (final Exception e) {
              Log.w(TAG, e);
                }
                return activityThread;
               }
              }

              看起来很简单对不对,其实其中复杂程度很高,具体内容可以看一种Android应用内全局获取Context实例的装置这篇博文。

              真看下去可以说收获颇多,如果只是使用的话直接取上面的 Applications 类即可,无需经过任何初始化即可在全局获取 Context 实例,当然有可能会与一些 HotFix 框架冲突,具体情况可在应用中自行查看。

              至于我碰到的特殊情况,对,就是上篇文章中讲到的特麻烦结果最后才发?#32622;?#24517;要的东西,因为要将项目 A 集成到项目 B中的话,A 的 Manifest 中必然不能配置 application 标签,否则会造成冲突,此时这个类就显得?#20219;?#24517;要了!

              点击复制链接 与好友分享!回本站首页
              上一篇:Android开发中ListView绑定数据知识讲解
              下一篇:关于AndroidStudio SDK Baiduyun Download (for android 6.0 development/Android Studio 1.5 - 2016)代码分析
              相关文章
              图文推荐
              点击排行

              关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

              版权所有: 红黑联盟--致力于做实用的IT技术学习网站

              极速飞艇好假
              <dl id="opymh"></dl>

              <div id="opymh"></div>
                  <div id="opymh"><tr id="opymh"></tr></div>

                    <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                    <em id="opymh"></em>

                    <em id="opymh"><ol id="opymh"></ol></em>

                          <dl id="opymh"></dl>

                          <div id="opymh"></div>
                              <div id="opymh"><tr id="opymh"></tr></div>

                                <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                                <em id="opymh"></em>

                                <em id="opymh"><ol id="opymh"></ol></em>

                                      时时彩开奖结果记录表 幸运农场快乐十分走势图 双色球奖金历史记录 新浪彩票可信吗 足彩胜负彩360 3d彩票走势图表格 扑克游戏大全 cc竞速飞车公式规律 大乐透11选5怎么玩法 体彩河南11选五走势图 云南时时彩走势20选5走势图 轻松掌握足彩半全场 快三在线人工计划网 500彩票网财报 360老时时彩开奖结果