一、Service通过IBinder与Activity进行通信
在Service中进行下载
Service
package chuiyuan.lsj.androidjava.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; import android.widget.Toast; public class DownloadService extends Service { private String TAG ="MainService" ; public class MyBinder extends Binder{ public DownloadService getService(){ return DownloadService.this; } } public void startDownload() throws InterruptedException{ //可以看出,这里是在主线程,所以如果真的下载,应该另开一个线程 Toast.makeText(DownloadService.this,"start download:"+Thread.currentThread().getName(), Toast.LENGTH_LONG).show(); Thread.sleep(2); Toast.makeText(DownloadService.this, "download end", Toast.LENGTH_LONG).show(); } //public MyBinder myBinder ; public DownloadService() { } @Override public void onCreate() { Log.d(TAG, "onCreate"); super.onCreate(); } @Override public void onDestroy() { Log.d(TAG, "onDestroy"); super.onDestroy(); } @Override public boolean onUnbind(Intent intent) { Log.d(TAG, "onUnbind"); return super.onUnbind(intent); } @Override public IBinder onBind(Intent intent) { return new MyBinder(); } }
测试
public class DownloadActivity extends BaseActivity{ private DownloadService downloadService; private ServiceConnection sc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadService = ((DownloadService.MyBinder)service).getService(); try{ downloadService.startDownload(); }catch (InterruptedException e){ e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } } ; @Override protected void findView() { setContentView(R.layout.activity_download); } @Override protected void initView() { } @Override protected void setOnClickListener() { } @Override public void onClick(View v) { } @Override protected void onStart() { super.onStart(); Intent bindIntent = new Intent(this, DownloadService.class); this.bindService(bindIntent, sc, BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); unbindService(sc); } }
二、Service通过Broadcast与Activity通信
Service
/** * Service通过BroadCast广播与Activity通信 * sendBroadcast from Service--->Android System---> * Receive by broadcastReceiver in Activity */ public class BroadcastService extends Service { private String TAG ="BroadcastService" ; public class MyBinder extends Binder{ public BroadcastService getService(){ return BroadcastService.this; } } ; public void sendServiceBroadcast() throws InterruptedException{ Toast.makeText(BroadcastService.this, "download in thread:"+ Thread.currentThread().getName(), Toast.LENGTH_SHORT).show(); Intent intent = new Intent() ; intent.setAction("chuiyuan.lsj.androidjava.service.broadcastservice") ; intent.putExtra("value", 1000) ; sendBroadcast(intent); Toast.makeText(BroadcastService.this, "send over", Toast.LENGTH_LONG).show(); } public BroadcastService() { } @Override public IBinder onBind(Intent intent) { return new MyBinder(); } @Override public void onCreate() { super.onCreate(); //如果 是用的startService,可以在这里执行 // Toast.makeText(this, "onCreate:send broadcast", Toast.LENGTH_SHORT).show(); // try { // sendServiceBroadcast(); // }catch (InterruptedException e){ // e.printStackTrace(); // } } @Override public void onDestroy() { Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show(); super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "onStartCommand", Toast.LENGTH_SHORT).show(); return super.onStartCommand(intent, flags, startId); } }
测试
public class ServiceSendbroadcastActivity extends BaseActivity{ private BroadcastService broadcastService; private ServiceConnection sc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { broadcastService = ((BroadcastService.MyBinder)service).getService(); try{ broadcastService.sendServiceBroadcast(); }catch (InterruptedException e){ e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } } ; @Override protected void findView() { setContentView(R.layout.activity_service_sendbroadccast); } @Override protected void initView() { //广播注册 IntentFilter filter = new IntentFilter() ; filter.addAction("chuiyuan.lsj.androidjava.service.broadcastservice"); registerReceiver(serviceReceiver, filter) ; } @Override protected void setOnClickListener() { } @Override public void onClick(View v) { } @Override protected void onStop() { super.onStop(); unbindService(sc); } @Override protected void onStart() { super.onStart(); Intent bindIntent = new Intent(this, BroadcastService.class) ; bindService(bindIntent, sc, BIND_AUTO_CREATE); } public BroadcastReceiver serviceReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras() ; if (extras!= null){ if (extras.containsKey("value")){ //这里可以做下载,发包等 Toast.makeText(ServiceSendbroadcastActivity.this, "receive broadcast:"+extras.get("value"), Toast.LENGTH_SHORT).show(); } } } } ; }
时间: 2024-10-20 04:56:05