您的位置:首页 > 移动开发 > Android开发

Android 服务绑定与数据同步

2016-06-14 23:57 441 查看






package com.example.metrox.l15;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Switch;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {
Intent intent;
EditText et;
MyService.Binder binder = null;
private boolean  isBind = false;
private  boolean isRuning = false;
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.btnStartService:
intent = new Intent(MainActivity.this,MyService.class);
et = (EditText) findViewById(R.id.editText);
intent.putExtra("data",et.getText().toString());
startService(intent);
isRuning = true;
break;
case R.id.btnStopService:
if(isRuning){
stopService(intent);
}
break;
case R.id.btnBindService:
bindService(intent,this,BIND_AUTO_CREATE);
isBind = true;
break;
case R.id.btnUnBindService:
if(isBind){
unbindService(this);
isBind = !isBind;
}
break;
case R.id.btnSyncData:
if(binder != null){
binder.setData(et.getText().toString());
}
break;
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.btnStartService).setOnClickListener(this);
findViewById(R.id.btnStopService).setOnClickListener(this);
findViewById(R.id.btnBindService).setOnClickListener(this);
findViewById(R.id.btnUnBindService).setOnClickListener(this);
findViewById(R.id.btnSyncData).setOnClickListener(this);
}

@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
System.out.println("服务已连接...");
binder = (MyService.Binder) iBinder;
}

@Override
public void onServiceDisconnected(ComponentName componentName) {
System.out.println("服务已断开...");
}
}


package com.example.metrox.l15;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

public class MyService extends Service {
private boolean isRun = false;
private String data = "default";
public MyService() {
}

@Override
public IBinder onBind(Intent intent) {
return  new Binder();
}

public class Binder extends android.os.Binder{
public void setData(String data){
MyService.this.data = data;
}
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("服务已启动...");
data = intent.getStringExtra("data");

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

@Override
public void onCreate() {
super.onCreate();
System.out.println("服务已创建...");
isRun = true;
new Thread(){
@Override
public void run() {
super.run();
while (isRun){
System.out.println(data);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

@Override
public void onDestroy() {
super.onDestroy();
isRun = false;
System.out.println("服务已消毁...");
}
}


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.metrox.l15.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止服务"
android:id="@+id/btnStopService"
android:layout_marginTop="48dp"
android:longClickable="false"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动服务"
android:id="@+id/btnStartService"
android:layout_alignTop="@+id/btnStopService"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="解绑服务"
android:id="@+id/btnUnBindService"
android:longClickable="false"
android:layout_alignTop="@+id/btnBindService"
android:layout_alignLeft="@+id/btnStopService"
android:layout_alignStart="@+id/btnStopService" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绑定服务"
android:id="@+id/btnBindService"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_above="@+id/btnStartService"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:text="默认数据" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="同步数据"
android:id="@+id/btnSyncData"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="74dp" />
</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: