2016-04-10 4 views
2

Я хочу создать службу, которая загружает контент из Интернета, и я хочу показать диалог выполнения во время его выполнения. Я знаю, как использовать диалог прогресса с asynctask и volley, но здесь я понятия не имею, теперь могу ли я быть уведомлен о потоке пользовательского интерфейса об окончании службы при использовании сервиса.Android - как показать диалог выполнения во время работы службы?

Как это сделать?

Код следующие

public class MainActivity extends Activity { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

} 

public void onClickStart(View v) { 
    startService(new Intent(this, MyService.class)); 
} 

public void onClickStop(View v) { 
    stopService(new Intent(this, MyService.class)); 
} 

} 


public class MyService extends Service { 

    public void onCreate() { 
    super.onCreate(); 
    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d(LOG_TAG, "onStartCommand"); 
    someTask(); 
    return super.onStartCommand(intent, flags, startId); 
    } 

    public void onDestroy() { 
    super.onDestroy(); 
    } 

    public IBinder onBind(Intent intent) { 
    return null; 
    } 

    void someTask() { 
    new Thread(new Runnable() { 
     public void run() { 
     for (int i = 1; i<=5; i++) { 
      Log.d(LOG_TAG, "i = " + i); 
      try { 
      TimeUnit.SECONDS.sleep(1); 
      } catch (InterruptedException e) { 
      e.printStackTrace(); 
      } 
     } 
     stopSelf(); 
     } 
    }).start(); 
    } 
+1

Для получения услуг вы должны указать уведомление. –

ответ

1

создавать широковещательные сообщения, когда вы хотите, чтобы показать или скрыть прогресс бар от службы:

Intent i = new Intent("yourPackage.SHOW_Progress"); 
sendBroadcast(i); 

затем создать широковещательный приемник и обрабатывать полученные сообщения:

public class MyReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MainActivity mainActivity = ((MyApplication) context.getApplicationContext()).mainActivity; 
     mainActivity.showProgress(); 
    } 

} 

и внутри вашего mainActivity создать метод показать или скрыть индикатор выполнения

+0

Спасибо за ответ! Вопрос - аргумент внутри Intent («yourPackage.SHOW_Progress») обязательно или может быть все внутри скобок? Могу ли я ссылаться на специальные намерения внутри onReceive в зависимости от аргумента намерения? –

+0

Аргумент внутри намерения - это действие намерения, которое может быть всем, что вам нравится, но должно быть таким же, как аргумент, который вы регистрируете в разделе манифеста. ** 2 ** вы можете отправить одно назначение трансляции и установить несколько дополнительных дополнительных значений в зависимости от того, что действие, которое вы хотите –

+0

Большое спасибо! Ты моя заставка! –

0

Существуют различные способы общения между службой и деятельности.

Вы можете отправить трансляцию с Сервиса и обработать его в Управлении с помощью BroadcastReceiver.

Или вы также можете связать Службу и отправить любую команду, когда служба завершит выполнение своей задачи.

Смежные вопросы