效果图:
之后点击,跳转到广播接收界面:
可以看得出,广播接收界面,一直在不断的接收着在service后台工作发出的信息
然后回到上个界面等了好久之后,再打开广播接收界面:
看得出数据时一直在后台工作的!
停止Service后台计算
WorkService:
public class WorkService extends Service {
private boolean isRun = true;
public WorkService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
isRun = false; // 终止线程,不再发送广播消息
super.onDestroy();
}
@Override
public void onCreate() {
new Thread(new Runnable() {
@Override
public void run() {
int count = 0;
while (isRun){
Intent intent = new Intent();
intent.setAction("ccv.turbosnail.broadcastdemo"); // 只有这个工程的广播接收器才能接收到信息
count++;
intent.putExtra("data","广播消息 " + count);
sendBroadcast(intent);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
super.onCreate();
}
}
ReceiverActivity.java
public class ReceiverActivity extends AppCompatActivity {
MyReceiver myReceiver = new MyReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receiver);
}
@Override
protected void onResume() {
super.onResume(); // 注册自定义广播接收器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("ccv.turbosnail.broadcastdemo");
registerReceiver(myReceiver,intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(myReceiver); // 关闭广播接收器
}
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getStringExtra("data"); // 接收广播信息
Toast.makeText(ReceiverActivity.this,data,Toast.LENGTH_LONG).show();
}
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnStart,btnReceiver,btnStop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
btnStart = findViewById(R.id.btn_Start);
btnReceiver = findViewById(R.id.btn_Receiver);
btnStop = findViewById(R.id.btn_Stop);
btnStart.setOnClickListener(this);
btnReceiver.setOnClickListener(this);
btnStop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_Start:
Intent intent = new Intent(MainActivity.this,WorkService.class);
startService(intent); // 使用 startServic 方式 启动服务
Toast.makeText(MainActivity.this,"Service 启动,开始广播",Toast.LENGTH_LONG).show();
break;
case R.id.btn_Receiver:
Intent intent1 = new Intent(MainActivity.this,ReceiverActivity.class);
startActivity(intent1);
break;
case R.id.btn_Stop:
Intent intent2 = new Intent(MainActivity.this,WorkService.class);
stopService(intent2);
Toast.makeText(MainActivity.this,"Service 停止,停止广播",Toast.LENGTH_LONG).show();
break;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_Start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text=" 启动 Service 定时发送广播 "
android:layout_marginTop="80dp"
android:textSize="17dp"/>
<Button
android:id="@+id/btn_Receiver"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text=" 跳转到广播接收界面 "
android:layout_marginTop="80dp"
android:textSize="17dp"/>
<Button
android:id="@+id/btn_Stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text=" 关闭 Service 停止发送广播 "
android:layout_marginTop="80dp"
android:textSize="17dp"/>
</LinearLayout>
activity_receiver.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ReceiverActivity">
</android.support.constraint.ConstraintLayout>
如果有问题,可以联系我qq:1787424177
最后,我真诚的希望能评论一句嘛,让我知道你来过,我会很开心的