Service与activity互传参数

service类

  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.
            Log.i("lgqq","body=33444====onBind");
            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 int onStartCommand(Intent intent, int flags, int startId) {
            Log.i("lgqq","body=233====onStartCommand");



//            return super.onStartCommand(intent, flags, startId);
            return START_STICKY;
        }

        @Override
        public void onCreate() {
            super.onCreate();
            Log.i("lgqq","body==22===onCreate");
            new Thread() {
                @Override
                public void run() {
                    super.run();

                    running = true;
                    int i = 0;
                    while (running) {
                        if (onMyServiceListener != null) {
                            onMyServiceListener.onNameChange(name + (i++));//service参数传到context
                        }
                        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);
        }
    }

 activity类

public class MyServiceactivity 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.myservicetesx);

        textView = (TextView) findViewById(R.id.textView);
        editText = (EditText) findViewById(R.id.editText);

        Intent intent = new Intent(this, MyService.class);
        startService(intent);
        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());//context参数传到service
                }
            }
        });

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

猜你喜欢

转载自blog.csdn.net/meixi_android/article/details/81091929