您的位置:首页 > 产品设计 > UI/UE

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

2014-03-20 00:46 525 查看
运行如图:





点击按钮停止Service。

Activity如下:

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如下:

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();
			}
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: