关于BroadcastReceiver和Service的指示可以参考文章
http://blog.csdn.net/taoolee/article/details/48297183;
http://blog.csdn.net/taoolee/article/details/48299467
整体实现思路
【1】实现服务
1新建MyService类实现服务
2在AndroidManifest.xml当中注册
3点击事件启动相应Intent的服务
【2】
1MyService当中的onStartCommand()方法启动在此方法中新建一个线程发送广播
【3】
1MainActivity当中接收广播
2onReceive()方法接收广播并得到下载进度滑动滚动条
1MyService.java
public class MyService extends Service {
private int count;
private static final String DOWN_LOAD_ACTION="com.service.test";
@Override
//当该Service被第一次创建后将立即回调该方法
public void onCreate() {
super.onCreate();
Log.d("11111111onCreate","onCreate");
}
@Override
//每次客户端调用startService(Intent)方法启动该Service时,都会回调该方法
public int onStartCommand(final Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(count>100){
count=0;
}
count++;
//线程当中启动广播
Intent intent1=new Intent();
intent1.setAction(DOWN_LOAD_ACTION);
intent1.putExtra("count", count);
sendBroadcast(intent1);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
Log.d("11111111onStartCommand","onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
//Service被关闭之前回调
public void onDestroy() {
super.onDestroy();
Log.d("1onDestroy", "111111111");
}
@Nullable
@Override
//Service子类必须实现的方法,该方法返回一个IBinder对象,应用程序可以通过该对象与Service组件通信
public IBinder onBind(Intent intent) {
Log.d("onBind", "11111111");
return null;
}
}
AndroidManifest.xml
<service android:name=".MyIntentService">
<intent-filter>
<action android:name="com.service"></action>
</intent-filter>
</service>
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button_start;
private Button button_stop;
private Button start_download;
private ProgressBar progressBar;
private MyReceiver receiver;
private MyService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_start= (Button) findViewById(R.id.button_start);
button_stop= (Button) findViewById(R.id.button_stop);
button_start.setOnClickListener(this);
button_stop.setOnClickListener(this);
start_download= (Button) findViewById(R.id.start_download);
progressBar= (ProgressBar) findViewById(R.id.progressbar);
start_download.setOnClickListener(this);
progressBar.setOnClickListener(this);
//registerReceiver接收广播
receiver=new MyReceiver();
IntentFilter filter=new IntentFilter("com.service");
registerReceiver(receiver, filter);
}
//接收后需要onDestroy
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_start:
// Intent intent=new Intent(getApplicationContext(),MyService.class);
Intent intent=new Intent("com.service");
startService(intent);
break;
case R.id.button_stop:
// Intent intent1=new Intent(getApplicationContext(),MyService.class);
Intent intent1=new Intent("com.service");
stopService(intent1);
break;
case R.id.start_download:
Intent intent2=new Intent("com.service");
startService(intent2);
break;
default:
break;
}
}
//接收广播
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int count= intent.getIntExtra("count",1);
progressBar.setProgress(count);
}
}
}
上面MyService在onStartCommand()方法中使用线程耗时模拟耗时任务,由于普通Service的执行会阻塞主线程,因此该线程会导致程序异常下一篇文章将会讲解IntentService解决上述问题