当前位置: 代码迷 >> Android >> 片段在重新加载时崩溃
  详细解决方案

片段在重新加载时崩溃

热度:162   发布时间:2023-08-04 12:48:01.0

我的问题是,在第二次重新加载时,我的片段由于NullPointerException而崩溃。 异常导致FragmentTransaction ft = getFragmentManager()。beginTransaction();

LogCat

java.lang.NullPointerException
        at xx.xx.wamomu.ui.MeasurementFragment.refresh(MeasurementFragment.java:344)
        at xx.xx.wamomu.ui.MeasurementFragment$9.run(MeasurementFragment.java:392)
        at java.lang.Thread.run(Thread.java:1019)

在创建片段时,我作为线程启动了一个循环,该循环正在侦听传入的事件。

public void threadloop(){

    (new Thread(new Runnable() {

        @Override
        public void run() {
            while (!Thread.interrupted())
                try {
                    Thread.sleep(10000);
                    Log.d("LOOP", "TIMEOUT OVER");

                    if (swtch == 1) {

                       refresh();
                        swtch = 0;
                    }
                } catch (InterruptedException e) {
                    // ooops
                }
        }
    })).start();

}

使用refresh()函数,我试图重新加载实际的片段。 我在对话框中使用此方法,关闭对话框后,刷新工作正常。

public void refresh() {

    Log.e("RESUMED", "OK");
    Thread.interrupted();
    Thread.currentThread().interrupt();
    Log.e("CURRENTTHREADREFRESH", "" + Thread.currentThread());
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        changeFragment = new MeasurementFragment();
        ft.replace(R.id.fl_content_frame, changeFragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.commit();


}

在片段中,第一次刷新有效,但是第二次刷新似乎使片段崩溃。 我在想,可能是循环引起了错误,因此我试图杀死该片段,主要是杀死循环线程。 但是循环不会停止。

即使我切换到另一个片段,线程也不会停止。 我试图在onPause()方法中停止它,但是循环继续运行。

@Override
public void onPause() {
    super.onPause();
    Thread.interrupted();
    Thread.currentThread().interrupt();
    Log.e("CURRENTTHREADPAUSE", "" + Thread.currentThread());
    Thread.currentThread().interrupt();
    getActivity().getSupportFragmentManager().popBackStack();
}

我解决了我的主要问题,片段崩溃了。 我只需要把

FragmentTransaction ft = getFragmentManager().beginTransaction();

onCreate()方法中。

问题二,线程没有停止。

编辑:

由于无法解决线程问题,因此我切换到ScheduledExecutorService,该服务已在onPause()方法中停止。

  相关解决方案