从神秘错误开始:java.lang.AssertionError: Attached DialogModule to host with pending alert but no FragmentManager (not attached to an Activity).
我在 MainActivity
中有这个:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myManager = new MyManager(this);
myManager.start();
}
public void onManagerReady() {
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setJSBundleFile("assets://index.js")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyReactCode");
setContentView(mReactRootView);
}
...
从 onCreate
调用 onManagerReady
按预期工作。但是当我在管理器中使用 AsyncTask
时,它失败了:
public interface ManagerHandler { void onJobReady(); }
...
public class Manager implements ManagerHandler {
public MyManager(Context context) {
this.context = context;
}
public void start() {
new AsyncJob(context, this).execute("");
}
@Override
public void onJobReady() {
((MainActivity)context).onManagerReady();
}
private class AsyncJob extends AsyncTask<String, Void, String> {
private final Context context;
private final ManagerHandler handler;
public AsyncJob(Context context, ManagerHandler handler) {
this.context = context;
this.handler = handler;
}
@Override
protected void onPostExecute(String result) {
handler.onJobReady();
}
...
}
我省略了一些 AsyncTask 样板 - 让我向您保证 AsyncTask 正在工作并且 onManagerReady() 在适当的时间被调用。
我也试过弄乱线程并“在 ui 线程上运行”,但没有成功。有趣的是,即使使用 Thread.sleep()
也会让 React 变得困惑,即使没有 AsyncTask 或从/到其他文件的调用也是如此。
最佳答案
可能为时已晚,无法为您提供帮助,但也许其他人会发现此答案有用。
基本上,您的 MainActivity
是 ReactActivity
的子类。您需要将其替换为您自己的类似于 ReactActivity
的类(只需复制粘贴)。将方法 onCreate(Bundle savedInstanceState)
的名称更改为其他名称,并在您的应用程序的其余部分准备好进行 react 时调用此方法。
您还需要更改 onResume()
,以便仅在加载 react 时更改状态:
@Override
protected void onResume() {
super.onResume();
if (mReactInstanceManager != null) {
mLifecycleState = LifecycleState.RESUMED;
mReactInstanceManager.onResume(this, this);
}
}
在初始化 React 的方法末尾调用 onResume。
关于android - 从 AsyncTask 调用时 startReactApplication 失败 - Android 中的 React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712733/