2016-04-10 91 views
2

我想創建一個服務,從網上下載內容,我想在執行時顯示進度對話框。我知道如何使用asynctask和volley進度對話框,但在這裏我不知道,現在我可以在使用服務時在UI線程上通知服務結束。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

intent中的參數是intent的動作,它可以是你喜歡的任何東西,但必須與你在manifest文件接收器部分註冊的參數相同。** 2 **您可以發送一個廣播intent並設置多個intent extra值,具體取決於你想要的行動 –

+0

非常感謝!你是我的救星! –

0

有不同的方式服務和活動之間進行通信。

您可以從服務發送廣播並使用BroadcastReceiver在活動中處理它。

或者你可以綁定服務並在服務完成任務時發回任何命令。