Service使用发送广播的方式更新UI, 方法如下:
首先在启动Service的方法中的线程中发送广播:
@Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(new Runnable() { @Override public void run() { int i = 0; while (true) { Intent intent = new Intent(); intent.putExtra("progress", i); intent.setAction("android.intent.action.progress"); sendBroadcast(intent); i++; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); return super.onStartCommand(intent, flags, startId); }
在Activity中注册并接收指定的广播:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bind); textView = (TextView) findViewById(R.id.bindText); startService(new Intent(this, MyBindService.class)); } public void bind(View view) { receiver = new ProgressReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.progress");
registerReceiver(receiver, filter);
} public class ProgressReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int progress = intent.getIntExtra("progress", -1); Log.d("===", "===> " + progress); textView.setText("progress " + progress); } }