如何在 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 上实现多线程?的主要内容,如果未能解决你的问题,请参考以下文章