По умолчанию 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