public class MainActivity extends AppCompatActivity {
private TextView tv_number;
private Button btn_start;
private MyBroadReciver reciver=null ;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
reciver=new MyBroadReciver();
tv_number= (TextView) findViewById(R.id.tv_number);
btn_start= (Button) findViewById(R.id.btn_start);
btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
turnService();
}
});
}
private void turnService (){
Intent intent=new Intent(this ,MyService.class);
startService(intent);
}
/**
* ⑥定义广播接收者,重写onReceive方法
*/
class MyBroadReciver extends BroadcastReceiver{
@Override
public void onReceive (Context context, Intent intent) {
String mes=intent.getStringExtra("count" );
tv_number.setText(mes);
}
}
/**
* ⑧开始接收广播时动态获取权限
*/
@Override
protected void onStart () {
super .onStart();
IntentFilter filter=new IntentFilter();
filter.addAction("com.work.test310.MainAcvitity" );
registerReceiver(reciver,filter);
}
/**
* ⑨结束广播时释放资源,解除绑定
*/
@Override
protected void onStop () {
super .onStop();
unregisterReceiver(reciver);
}
public class MyService extends Service {
private MyThread thread=null ;
public static int i=10 ;
public MyService () {
}
@Override
public IBinder onBind (Intent intent) {
throw new UnsupportedOperationException("Not yet implemented" );
}
/**
* ③重写onStartCommand方法
* @param intent
* @param flags
* @param startId
* @return
*/
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
if (thread==null ){
thread=new MyThread();
thread.start();
}
return super .onStartCommand(intent, flags, startId);
}
/**
* ④自定义线程类,设置倒计时的线程方法
*/
class MyThread extends Thread{
@Override
public void run () {
while (i>=0 ){
Intent intent=new Intent("com.work.test310.MainAcvitity" );
intent.putExtra("count" ,String.valueOf(i));
sendBroadcast(intent);
try {
Thread.sleep(1000 );
} catch (InterruptedException e) {
e.printStackTrace();
}
i--;
}
super .run();
}
}