サービス更新UI


来た:http://www.cnblogs.com/gqsblog/archive/2012/04/17/2453378.html
直接コードを貼る:
 
package com.gqs.activity;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com.gqs.service.UpdateService;import com.gqs.service.UpdateService.MyBinder;import com.gqs.service.UpdateService.UpdateData;public class ServiceToActivityActivity extends Activity {
    /** Called when the activity is first created. */     private TextView tv;
    private UpdateService.MyBinder binder;
    private Button btnStart;
    private ServiceConnection conn=new ServiceConnection() {
        
        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub             
        }
        
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub             binder=(MyBinder) service;
            tv.setText("   ");
        }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnStart=(Button)findViewById(R.id.btnStart);
        tv=(TextView)findViewById(R.id.textView);
        Intent intent=new Intent(this,UpdateService.class);
        bindService(intent, conn, Context.BIND_AUTO_CREATE);
        btnStart.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub                 if(binder!=null)
                {
                    binder.setDate(tv, new UpdateData() {
                        
                        @Override
                        public void update(TextView tv, int data) {
                            // TODO Auto-generated method stub                             tv.setText(data+"");
                        }
                    });
                }
                else                 {
                    Toast.makeText(getApplicationContext(), "    ", 1).show();
                }
            }
        });
    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub         unbindService(conn);
        super.onDestroy();
    }
}
  package com.gqs.service; 
 import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.widget.TextView; 
 public class UpdateService extends Service {     private int data;     private Handler handler; 
     @Override     public IBinder onBind(Intent intent) {         // TODO Auto-generated method stub          return new MyBinder();     } 
     public class MyBinder extends Binder {         public void setDate(final TextView tv, final UpdateData updata) {             new Thread(new MyThread()).start();             handler = new Handler() {                 public void handleMessage(Message msg) {                     updata.update(tv, data);                 }             };         }     } 
     public class MyThread implements Runnable { 
         @Override         public void run() {             while (true) {                 data++;                 Message msg = handler.obtainMessage();                 msg.arg1 = data;                 handler.sendMessage(msg);                 try {                     Thread.sleep(1000);                 } catch (InterruptedException e) {                     // TODO Auto-generated catch block                      e.printStackTrace();                 }             }         } 
     } 
     public interface UpdateData {         public void update(TextView tv, int data); 
     } }