gpt4 book ai didi

android - 长时间空闲后重新初始化 Twitter Fabric android 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:47 26 4
gpt4 key购买 nike

所以我的 Android 应用程序具有以下组件:一个 LoginActivity,一个使用 Navigation Drawer 的 MainActivity,一堆由 Main Activity 中的 Nav Drawer 处理的各种 fragment 。

在 LoginActivity 中,我设置了 TwitterAuthConfig 并将其输入 Fabric.with(....Twitter(authConfig)...),基本上按照他们在文档中所说的去做:Fabric integration documentation

在用户通过 LoginActivity 导航并成功登录后,它会转到 Main Activity,这会打开 Navigation Drawer 并让他们选择他们想要转到的 Fragment。 LoginActivity 在启动 MainActivity 后调用 this.finish()

我的问题是我使用的其中一个 fragment 使用了嵌入式 Twitter 时间轴,它需要通过 Fabric.with() 调用进行 Fabric 身份验证。这第一次工作很好,但是一旦我离开应用程序并且它在后台停留了一段时间,我相信 onDestroy() 被调用,然后 Fabric 实例被删除。

因此,当我再次从后台打开它时,出现如下错误:

07-09 15:59:55.179    7933-7933/com.writers.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.writers.myapp, PID: 7933
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.writers.myapp/com.writers.myapp.MainActivity}: java.lang.IllegalStateException: Must Initialize Fabric before using singleton()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
at android.app.ActivityThread.access$900(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Caused by: java.lang.IllegalStateException: Must Initialize Fabric before using singleton()
at io.fabric.sdk.android.Fabric.singleton(Fabric.java:265)
at io.fabric.sdk.android.Fabric.getKit(Fabric.java:516)
at com.twitter.sdk.android.tweetui.TweetUi.checkInitialized(TweetUi.java:120)
at com.twitter.sdk.android.tweetui.TweetUi.getInstance(TweetUi.java:69)
at com.twitter.sdk.android.tweetui.TwitterListTimeline$Builder.<init>(TwitterListTimeline.java:108)
at com.myapp.newstimeline.TimelineFragment.onCreateView(TimelineFragment.java:49)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1929)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
at android.app.Activity.performStart(Activity.java:5949)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
at android.app.ActivityThread.access$900(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
07-09 15:59:55.203 775-1192/? W/ActivityManager﹕ Force finishing activity com.writers.myapp/.MainActivity

知道如何解决这个问题吗?

  • 我应该在 MainActivity 中添加额外的 Fabric.with() 语句吗?
  • 我应该捕获 IllegalStateException 吗?如果有,在哪里?
  • 我做错了吗?

提前感谢您的帮助!

最佳答案

我建议您拥有一个 BaseActivity 并使您的所有 Activity 都扩展该 BaseActivity

在该基类的onCreate 函数中,初始化Fabric 实例,如果它没有像这样初始化的话:

public class BaseActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (!Fabric.isInitialized()) {
Fabric.with(....Twitter(authConfig)...)
}
//Do other stuff.
}

这样你就可以确保它总是被初始化。

关于android - 长时间空闲后重新初始化 Twitter Fabric android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com