我同时运行一个Service和AsyncTask,在服务内部,将数据存储在服务器中,在AsyncTask中,从另一个源获取数据并更新UI。
在显示该UI后,直到服务内部的任务完成,UI才会更新
protected List<AppItem> doInBackground(MyTaskParams... integers) {
android.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);
我将上述代码用于asynctask,但无法正常工作,我该如何优先于AsyncTask而不是Service
答案 0 :(得分:2)
改用这段代码
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
答案 1 :(得分:1)
默认情况下,Service
在主线程上运行。
请记住,如果您确实使用了一项服务,该服务仍会在您的 应用程序的主线程默认情况下,因此您仍应创建一个新的 服务中的线程(如果它执行密集或阻塞) 操作。
https://developer.android.com/guide/components/services?hl=en#should-you-use-a-service-or-a-thread
似乎您先启动Service
,然后再运行AsyncTask
。由于该服务在Main
线程中运行,因此您的AsyncTask在完成之前不会启动。
更新
有很多解决方案,选择取决于要求。在您看来,实现并发的最简单方法是使用IntentService
。因此,您可以从IntentService
开始AsyncTask
和Activity
。
public class MyIntentService extends IntentService
{
private static final String TAG = this.getClass().getSimpleName();
public MyIntentService() {
super("MyIntentService");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
super.onStartCommand(intent, flags, startId);
Log.d(TAG, "MyIntentService Started");
// This thing still happens on ui thread
return START_NOT_STICKY;
}
@Override
protected void onHandleIntent(Intent intent)
{
Log.d(TAG, "MyIntentService Handling Intent");
// Your work should be here, it happens on non-ui thread
}
}
https://developer.android.com/reference/android/app/IntentService