android Service传值

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);
    }
}

版权声明:本文为baidu_25845567原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。