美文网首页
Android-多线程下任意位置获取应用Context

Android-多线程下任意位置获取应用Context

作者: 滴沥的雨云 | 来源:发表于2017-11-26 21:05 被阅读0次
 public static Application getApplication() {
        if (Looper.getMainLooper() != Looper.myLooper()) {
            final Object obj = new Object();
            final Application[] res = {null};
            synchronized (obj) {
                try {
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public void run() {
                            res[0] = getApplication();
                            obj.notify();
                        }
                    });
                    obj.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return res[0];
        }
        try {
            return (Application) Class.forName("android.app.ActivityThread").getMethod("currentApplication").invoke(null, (Object[]) null);
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            return (Application) Class.forName("android.app.AppGlobals").getMethod("getInitialApplication").invoke(null, (Object[]) null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
注意:

建议不要用反射,比较耗时,可以在application的onCreate中存一个静态变量

参考:http://www.jianshu.com/p/808b9d92d6cd

相关文章

网友评论

      本文标题:Android-多线程下任意位置获取应用Context

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