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

Posted

技术标签:

【中文标题】如何在 Android Activity 上实现多线程?【英文标题】:How do I implement multi thread on an Android Activity? 【发布时间】:2018-07-26 09:23:55 【问题描述】:

我在我的 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。我尝试使用读取和更新字段的while(true) 来实现run() 方法,但是当我启动Activity 时应用程序会崩溃。

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

【问题讨论】:

【参考方案1】:

嘿,一个解决方案可能是尝试使用 Java 的 Executor Framework。将以下代码放入您的活动中。

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

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

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

AsyncTask

HandlerThread

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于如何在 Android Activity 上实现多线程?的主要内容,如果未能解决你的问题,请参考以下文章

android中如何在appwidget上实现动画效果

WIN7实现多用户远程桌面

如何在 Android 1.5 上实现推送?

OroPlatform:如何实现 MultiFileType

如何使用 Cordova 在 Android 上实现打印?

如何在Android上实现实时视频编辑?