Blog / 阅读

后台Service通过广播更新UI,Activity通过广播停止Service

by admin on 2014-03-20 22:01:11 in ,



运行如图:

点击按钮停止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();  
            }  
        }  
    }  
}  




写评论

相关文章

上一篇:Android基本功:手势

下一篇:Android开发优化之——对Bitmap的内存优化

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云