如果没有 Facebook 集成,我的应用程序没有任何功能,所以我的应用程序在 onCreate 中所做的第一件事就是登录 Facebook,为其提供一个监听器,该监听器将抓取用户的新闻提要,然后将其加载到我的应用程序中。但是,在 Kindle Fire 模拟器上,我的应用程序甚至无法使用 SDK 的授权调用打开 Facebook 的登录对话框。
这个登录以及我的应用程序的其余部分在几个测试设备上完美运行,我创建的每个 AVD 模拟器除了我从 SDK 管理器安装的官方 Kindle Fire 模拟器。遗憾的是,我无法使用 Kindle Fire,因此无法在真实设备上对其进行测试。
为了隔离问题,我临时修改了我的代码,在回调监听器中完全不做任何事情,我只为我的 onDataLoaded() 实现留下了一个空的 void 方法。在 onCreate 中,我调用以下命令:
m_fbHelper.authorize(new NFDataLoadedListener() {
public void onDataLoaded() {
// TODO Auto-generated method stub
}
}, this);
FbHelper 类中的定义是:
public void authorize(NFDataLoadedListener dataLoadedListener, Home homeActivity){
m_facebook.authorize(homeActivity, s_permissions, new FacebookDataRetrievalListener(dataLoadedListener));
}
创建活动并进行此调用时,会出现一个通知框,上面写着“正在加载”,这通常在登录时发生。然后应用程序崩溃并且模拟器返回主屏幕。
日志这样说:
08-15 01:40:23.338: D/Zygote(32): 进程 414 由信号 (4) 终止
08-15 01:40:23.342: I/ActivityManager(61): 进程 com.mattgmg.socialadvancedpro (pid 414) 已经死亡。
08-15 01:40:23.366: E/InputDispatcher(61): 通道'405ea458
com.mattgmg.socialadvancedpro/com.mattgmg.socialadvancedpro.Home (server)' ~ 消费者关闭输入通道或发生错误。事件=0x8
08-15 01:40:23.366: E/InputDispatcher(61): 频道 '405ea458 com.mattgmg.socialadvancedpro/com.mattgmg.socialadvancedpro.Home (server)' ~ 频道已无法恢复,将被处理!08-15 01:40:23.392: I/WindowManager(61): WIN DEATH: Window{4061da60 com.mattgmg.socialadvancedpro/com.mattgmg.socialadvancedpro.Home paused=false}
08-15 01:40:23.422: I/WindowManager(61): WIN DEATH: Window{405ea458 com.mattgmg.socialadvancedpro/com.mattgmg.socialadvancedpro.Home paused=false}
08-15 01:40:23.482: I/WindowManager(61): WIN DEATH: Window{40636a48 com.mattgmg.socialadvancedpro/com.mattgmg.socialadvancedpro.Home paused=false}
08-15 01:40:23.512:E/InputDispatcher(61):收到未知输入通道的虚假接收回调。fd=175,事件=0x8
08-15 01:40:23.512:E/InputDispatcher(61):收到未知输入通道的虚假接收回调。fd=178,事件=0x8
08-15 01:40:23.863:I/LAB126(119):StatusBarService 听到意图。行动:com.lab126.intent.TOP_WINDOW_CHANGED
由于没有堆栈跟踪,我无法弄清楚为什么 Facebook SDK 无法显示登录对话框。其他SO帖子说这些日志消息表明内存泄漏,但是我除了尝试登录Facebook之外还没有在应用程序中做任何事情,所以如果它是内存泄漏肯定是SDK问题。