如何在Android Activity上实现多线程?

时间:2018-02-15 15:06:22

标签: android multithreading android-activity

我在Activity

中创建了一个嵌套类
public class MissionsActivity extends Activity {

class UpdateMissions implements Runnable {

    @Override
    public void run() {
      android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
        [...]
}

   [...]
}

在线程中,我必须读取文件并更新布局中的一些TextFields。我尝试使用run()方法实现while(true)方法来读取和更新字段,但是当我启动Activity时,应用只会崩溃。

更新:我在UI活动的execute()方法中调用了onCreate()方法。任务仅在我第一次进入活动时工作,如果我改变并返回它将不会做任何事情。

2 个答案:

答案 0 :(得分:0)

嘿,解决方案可能是尝试使用Java的Executor Framework。将以下代码放在Activity中。

使用执行者,您可以使用cachedThreadPool() singleThreadExecutor() fixedThreadPoolExecutor(int numOfThreads)等。

Executors.newSingleThreadExecutor().submit(new Runnable() {
        @Override
        public void run() {
            //Your task here.
        }
    });

请注意Android中有许多线程模型和技术,一些Android特定,一些基于Android。

AsyncTask

HandlerThread

答案 1 :(得分:0)

您可以使用AsyncTask。它允许您加载文件并在ui线程上显示进度,直到加载完成为止。

这里有一个很好的例子Download a file with Android, and showing the progress in a ProgressDialog

如果您在开发方面更先进,我会建议使用RxJava或实时数据,但第一个解决方案也足够开始 https://developer.android.com/topic/libraries/architecture/livedata.html