运行如图:
点击按钮停止Service。
Activity如下:
[java] view plaincopy
package com.example.aandroidtest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends PublicActivity {
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) this.findViewById(R.id.textView1);
//一个button,发送广播,停止service中启动的线程,以及停止service
Button button = (Button) this.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.excample.stopService");
sendBroadcast(intent);
}
});
//注册广播,接收service中启动的线程发送过来的信息,同时更新UI
IntentFilter filter = new IntentFilter("com.example.updateUI");
this.registerReceiver(new MyBroadCaseReceiver(), filter);
//启动service
Intent intent = new Intent(this, MyService.class);
this.startService(intent);
}
class MyBroadCaseReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent intent) {
int i = intent.getIntExtra("data", 0);
text.setText(String.valueOf(i));
}
}
}
Service如下:
[java] view plaincopy
package com.example.aandroidtest;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
public class MyService extends Service {
boolean flag = true;//用于停止线程
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//注册receiver,接收Activity发送的广播,停止线程,停止service
IntentFilter filter = new IntentFilter();
filter.addAction("com.excample.stopService");
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
flag = false;
stopSelf();//在service中停止service
}
}, filter);
//启动线程,每隔1s给广播个数据,给Activity接收到,并更新UI
new Thread(new MyThread()).start();
return super.onStartCommand(intent, flags, startId);
}
class MyThread implements Runnable {
int i = 100;
public void run() {
try {
while(flag) {
Thread.sleep(1000);
Intent intent = new Intent("com.example.updateUI");
intent.putExtra("data", i);
sendBroadcast(intent);
i++;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
评论