2016-04-10 54 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在活动中处理它。

或者你可以绑定服务并在服务完成任务时发回任何命令。