我最近正在尝试阅读.I的安卓源代码,有两套源码,安卓-22和安卓-21。我发现它们之间有些不同之处。下面是PolicyManager的一段源代码,我认为它有很大的问题!公共类PolicyManager {
public static Window makeNewWindow(Context context) {
// this will likely crash somewhere beyond so we log it.
Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED,
"Call to PolicyManager.makeNewWindow is not supported", null);
return null;
}正如我们所看到的,PolicyManager.makeNewWindow直接返回null,如果我调用PolicyManager.makeNewWindow,我将得到null!让我们来看看Activity的附加方法: final void attach(Context context,ActivityThread aThread,Instrumentation instr,IBinder token,int ident,Application application,Intent intent,ActivityInfo info,CharSequence title,Activity parent,String id,NonConfigurationInstances lastNonConfigurationInstances,Configuration config,String referrer,IVoiceInteractor voiceInteractor) { attachBaseContext(context);
mFragments.attachActivity(this, mContainer, null);
mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);
mWindow.setOnWindowDismissedCallback(this);
mWindow.getLayoutInflater().setPrivateFactory(this);mWindow是否为空?MWindow.setCallback(这)会触发NullPointer异常吗?我不得不说我从androidstudio下载了源码,我想知道源码是不是错了?
发布于 2016-01-28 16:22:14
Android-23源代码中的Activity类
mWindow = new PhoneWindow(this)对于新的PhoneWindow对象,不要在api-22之后使用PolicyManager类。
在android api-23下开发时,可以通过反射创建一个PhoneWindow对象。以下是代码。
String phone_window_calss = "com.android.internal.policy.PhoneWindow";
Class phoneWindowClass = null;
try {
phoneWindowClass = Class.forName(phone_window_calss);
Constructor constructor = phoneWindowClass.getDeclaredConstructor(new Class[]{Context.class});
mWindow = (Window) constructor.newInstance(context);
} catch (Exception e) {}https://stackoverflow.com/questions/32173797
复制相似问题