我的应用程序在没有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):channel'405ea458
com.mattgmg.socialadvancedpro / com.mattgmg.socialadvancedpro.Home (服务器)'〜消费者关闭输入通道或发生错误。 事件= 0x8中
08-15 01:40:23.366:E / InputDispatcher(61):channel'405ea458 com.mattgmg.socialadvancedpro / com.mattgmg.socialadvancedpro.Home (服务器)'〜频道无法恢复,将被丢弃! 08-15 01:40:23.392:I / WindowManager(61):胜利死亡:窗口{4061da60 com.mattgmg.socialadvancedpro / com.mattgmg.socialadvancedpro.Home 暂停= FALSE}
08-15 01:40:23.422:I / WindowManager(61):胜利死亡:窗口{405ea458 com.mattgmg.socialadvancedpro / com.mattgmg.socialadvancedpro.Home 暂停= FALSE}
08-15 01:40:23.482:I / WindowManager(61):胜利死亡:窗口{40636a48 com.mattgmg.socialadvancedpro / com.mattgmg.socialadvancedpro.Home 暂停= 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听到意图。 action:com.lab126.intent.TOP_WINDOW_CHANGED
由于没有堆栈跟踪,我无法弄清楚为什么Facebook SDK无法启动登录对话框。其他SO帖子说这些日志消息表明内存泄漏,但我还没有在应用程序中做任何事情,除了尝试登录Facebook,所以如果它是内存泄漏它必须是SDK问题。