android视图没有从另一个类和另一个线程

时间:2017-07-03 15:11:57

标签: java android multithreading view

我正在尝试更新活动中的TextView,更新视图的方法是在主活动(正常情况)中,但调用此方法来自另一个类(和另一个线程)。

这是更新视图的方法,此方法在主要活动中,  (请注意,所有日志都按正确顺序打印):

    public void getDataFromFiles() {
    String new_text = JsonReader.readTextData(dataName,activityName, this);
    Log.i("Loading", "loaded text " + new_text  );
    if (new_text != null) {
        TextView introText = (TextView) findViewById(R.id.loading_introTxt);
        introText.setText(new_text);
    }

}

这是从另一个名为LoadingThread的类调用的地方,它有引用(loadingActivity):

            activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.i("LoadingThread", "Will update loading screen");
                loadingActivity.getDataFromFiles();

            }
        });

还要注意如何从主活动

调用LoadingThread类
    LoadingThread loadingThread = LoadingThread.getInstance(this);
    Thread thread = new Thread(loadingThread);
    loadingThread.setActivity(this);
    thread.start();

所以这就是流程: 主活动启动LoadingThread,然后再调用主活动中的一个方法,该方法应该更新视图,但这不会发生,但是当关闭应用程序并再次重新打开时,则会有更新。

1 个答案:

答案 0 :(得分:0)

我发现了问题,它在

LoadingThread loadingThread = LoadingThread.getInstance(this);
Thread thread = new Thread(loadingThread);
loadingThread.setActivity(this);

而getInstance()是:

    if (instance == null) {
        instance = new LoadingThread();
        instance.loadingActivity = loadingActivity;

    }
    return instance;

关闭并重新打开应用程序时,实例不为null,因此返回之前不再存在的活动,因为加载活动的引用未更新,所以我改变了它

    if (instance == null) {
        instance = new LoadingThread();
    }
    instance.loadingActivity = loadingActivity;
    return instance;

现在它有效!