Android:AsyncTask比Service更优先



我有一个服务和AsyncTask同时运行,在服务内部,将数据存储在服务器中,在AsyncTask中,从不同的来源获取数据并更新UI。

在服务内的任务完成之前,UI 不会更新,之后 UI 会显示

protected List<AppItem> doInBackground(MyTaskParams... integers) {
android.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);

我将上面的代码用于异步任务,但它不起作用,我怎样才能给 AsyncTask 而不是服务

改用这段代码

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

默认情况下,Service在主线程上运行。

请记住,如果您确实使用某项服务,它仍然在您的 默认情况下是应用程序的主线程,因此您仍应创建一个新的 服务中的线程(如果它执行密集型或阻塞( 操作。

https://developer.android.com/guide/components/services?hl=en#should-you-use-a-service-or-a-thread

看起来您首先开始Service,然后运行AsyncTask。由于服务在Main线程中运行,因此 AsyncTask 在完成之前不会启动。

更新

有许多解决方案,选择取决于要求。在您的情况下,实现并发的最简单方法是使用IntentService。因此,您可以从Activity开始IntentServiceAsyncTask

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

最新更新