android Service传值

来源:互联网 发布:机房网络静电地板 编辑:程序博客网 时间:2024/05/23 12:17
public class MainActivity extends AppCompatActivity implements ServiceConnection {    private static final int RECALL_NAME = 0;    private TextView textView;    private EditText editText;    private MyService.MyBinder binder;    private android.os.Handler handler = new android.os.Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.arg1 == RECALL_NAME) {                textView.setText(msg.getData().getString("name"));            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView) findViewById(R.id.textView);        editText = (EditText) findViewById(R.id.editText);        Intent intent = new Intent(this, MyService.class);        bindService(intent, this, Context.BIND_AUTO_CREATE);        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (binder != null) {                    binder.setName(editText.getText().toString());                }            }        });        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                unbindService();            }        });    }    private void unbindService() {        if (binder != null) {            unbindService(this);            binder = null;        }    }    @Override    public void onServiceConnected(ComponentName name, IBinder service) {        binder = (MyService.MyBinder) service;        binder.getService().setOnMyServiceListener(new MyService.OnMyServiceListener() {            @Override            public void onNameChange(String name) {                Message message = new Message();                Bundle bundle = new Bundle();                bundle.putString("name", name);                message.setData(bundle);                message.arg1 = RECALL_NAME;                handler.sendMessage(message);            }        });    }    @Override    public void onServiceDisconnected(ComponentName name) {        unbindService();    }    @Override    protected void onDestroy() {        super.onDestroy();        unbindService();    }}

public class MyService extends Service {    private String name = "zzz";    private boolean running = false;    public MyService() {    }    @Override    public IBinder onBind(Intent intent) {        // TODO: Return the communication channel to the service.        return new MyBinder();    }    public class MyBinder extends Binder implements IBinder {        public void setName(String name) {            MyService.this.name = name;        }        public MyService getService() {            return MyService.this;        }    }    @Override    public void onCreate() {        super.onCreate();        new Thread() {            @Override            public void run() {                super.run();                running = true;                int i = 0;                while (running) {                    if (onMyServiceListener != null) {                        onMyServiceListener.onNameChange(name + (i++));                    }                    try {                        sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }.start();    }    @Override    public void onDestroy() {        super.onDestroy();        running = false;    }    private OnMyServiceListener onMyServiceListener = null;    public void setOnMyServiceListener(OnMyServiceListener onMyServiceListener) {        this.onMyServiceListener = onMyServiceListener;    }    public OnMyServiceListener getOnMyServiceListener() {        return onMyServiceListener;    }    public static interface OnMyServiceListener {        void onNameChange(String name);    }}
0 0