接口部分
public interface DataServiceListener {
void onProgress(int progress);
}
Service部分
public class DataService extends BaseService {
private final IBinder mBinder = new DataBinder();
private DataServiceListener mDataServiceListener;
public void setOnServiceListener(DataServiceListener listener) {
this.mDataServiceListener = listener;
}
@Override
public IBinder onBind(Intent intent) {
//普通服务的不同之处,onBind()方法不在打酱油,而是会返回一个实例
return mBinder;
}
public class DataBinder extends Binder {
public int getProgress() {
Log.d("MyService", "getProgress executed");
return 0;
}
public void startDown() {
startDownLoad();
}
/**
* 获取当前Service的实例
*/
public DataService getService() {
return DataService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
}
/**
* 模拟下载任务,每秒钟更新一次
*/
public void startDownLoad() {
new Thread(new Runnable() {
@Override
public void run() {
int progress = 0;
while (progress < 100) {
progress += 5;
if (mDataServiceListener != null) {
mDataServiceListener.onProgress(progress);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
Activity部分
public class TestActivity extends BaseActivity {
private DataService.DataBinder mDataBinder;
public static void startTargetActivity(Context srcActivity, Class targetClass) {
Intent intent = new Intent(srcActivity, targetClass);
srcActivity.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_touch_layout);
initView();
initData();
bindService();
}
private void bindService() {
Intent bindIntent = new Intent(this, DataService.class);
bindService(bindIntent, connection, BIND_AUTO_CREATE);
}
private void unBindService() {
unbindService(connection);
}
/**
* 可交互的后台服务与普通服务的不同之处,就在于这个connection建立起了两者的联系
*/
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mDataBinder = (DataService.DataBinder) service;
mDataBinder.getService().setOnServiceListener(new DataServiceListener() {
@Override
public void onProgress(int progress) {
doSomething(progress);
}
});
mDataBinder.startDown();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
private void initData() {
}
private void initView() {
}
private void doSomething(int progress) {
Log.e(TAG, progress + "");
}
@Override
protected void onDestroy() {
super.onDestroy();
unBindService();
}
}