android Hander Service 广播的综合使用案例
原理:在主activity里启动一个服务,这个服务通过Handler每一秒发送一条广播,并在主activity里注册一个广播接受者(BroadcastReceiver),这个广播接收者的作用在于搜到server的广播,并是的i加1,并且把i的值设置到textview,达到美妙加1的效果
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
Button button1;
Button button2;
TextView textView;
publicstatic int i = 0;
publicstatic Handler handler;
Intent intent1;
MyBroadcastReceiver mybroadcast;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.start);
button2 = (Button)findViewById(R.id.stop);
textView = (TextView)findViewById(R.id.number);
button1.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
handler= new Handler(){
@Override
publicvoid handleMessage(Message msg) {
super.handleMessage(msg);
sendBroadcast(new Intent().setAction("ACTION"));
this.sendEmptyMessageDelayed(1, 1000);
}
};
Log.d("--","-------------------" + "onclick_start");
intent1 =new Intent(MainActivity.this, MyService.class);
startService(intent1);
IntentFilter intentFilter =new IntentFilter();
mybroadcast =new MyBroadcastReceiver();
intentFilter.addAction("ACTION");
MainActivity.this.registerReceiver(mybroadcast, intentFilter);
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
publicvoid onClick(View v) {
unregisterReceiver(mybroadcast);
stopService(intent1);
if(handler !=null){
handler.removeMessages(1);
handler =null;
}
}
});
}
class MyBroadcastReceiverextends BroadcastReceiver{
@Override
publicvoid onReceive(Context context, Intent intent) {
i++;
if (intent.getAction().equals("android.intent.action.DATE_CHANGED")) {
} else if (intent.getAction().equals("ACTION")) {
}
textView.setText(i + "");
}
}
}
定义一个Service
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service{
@Override
public IBinder onBind(Intent intent) {
returnnull;
}
@Override
publicvoid onCreate() {
super.onCreate();
}
@Override
publicint onStartCommand(Intent intent, int flags,int startId) {
MainActivity.handler.sendEmptyMessageDelayed(1, 1000);
returnsuper.onStartCommand(intent, flags, startId);
}
@Override
publicvoid onDestroy() {
super.onDestroy();
if(MainActivity.handler !=null){
MainActivity.handler.removeMessages(1);
MainActivity.handler =null;
}
}
}
</activity>
<service android:name="com.example.myhandlertest.MyService"></service> //注意AndroidManifest.xml文件中必须加上这一行
</application>
运行的效果图: