我正在尝试将我的一个应用程序转换为现在使用 Fragments。此应用程序还使用 Android 许可证检查器。在测试时,我将许可证检查器代码注释掉了,现在应用程序可以按我想要的方式运行。我现在准备取消注释该代码,以便将其放回市场,但是当我这样做时,我每隔一次启动应用程序时都会收到此消息:
java.lang.IllegalStateException:片段 MainHomeFragment{40544bd8} 未附加到 Activity
如果我在手机上或使用模拟器进行测试,就会发生这种情况。似乎许可证检查器完成的速度不够快,所以当它膨胀 Fragment 时,没有 Activity 可以附加它。起初我只是启动应用程序,然后在加载后按下后退按钮并立即再次尝试。我认为许可证检查器可能在第一次尝试时仍然在运行,所以下次我在使用返回键之前等待了 5 分钟,仍然遇到同样的问题。奇怪的是,在应用程序第二次炸毁后,如果我再次尝试它,它可以工作,但在第 4 次尝试它再次失败,所以不能从第一次成功的尝试中清除某些东西。如果我注释掉 LicenseChecker 代码并再次运行它,它每次都能正常工作。我尝试将对 LicenseChecker 的调用作为线程放在一个新类中,这样它就不会阻止正在创建的活动,但仍然会遇到同样的问题。关于我应该尝试解决这个问题的任何想法?
这是我的主要 FragmentActivity 的 onCreate 代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork =
connectivityManager.getActiveNetworkInfo();
if (activeNetwork != null) {
android_id = Secure.getString(this.getContentResolver(),
Secure.ANDROID_ID);
mObsfuscator = new AESObfuscator(SALT, getPackageName(), android_id);
ServerManagedPolicy serverPolicy = new
ServerManagedPolicy(this, mObsfuscator);
mLicenseCheckerCallback = new MyLicenseCheckerCallback();
mChecker = new LicenseChecker(this, serverPolicy,
BASE64_PUBLIC_KEY);
mChecker.checkAccess(mLicenseCheckerCallback);
}
setContentView(R.layout.fragment_layout);
}