Android Service詳解(二)第一個Service

    Service中有四個重要函數:  

    public IBinder onBind(Intent arg0);    //必須實現,返回接口給Service
    public void onCreate();                //Service創建時調用
    public void onStart(Intent intent,int startId);//通過startService()會調用
    public void onDestroy();                //銷燬時StopService()調用

 

通過StartActivity()函數啓動Service,當第一次調用時會分別調用onCreate()和onStart在();

之後只會調用onStart();

通過函數StopService()結束Service,會調用onDestroy();

調用BindService():當Service未創建時調用onCreate()和onBind();當創建了只調用onBind();

使用函數bindService()和函數unbindService()可以綁定和解除綁定

對已經綁定的Service調用bindService()無效,即多次調用bindService()和調用一次bindService()一樣。 unbindService()只能使用一次,即對於一個綁定的Service,只能調用一次unbindService(),多次調用會產生錯誤


該函數原型爲:

bindService(Intent,ServiceConnection,BIND_AUTO_CREATE);

ServiceConnection是一個服務連接類,必須實現以下兩個函數:

public void onServiceConnected(ComponentName arg0, IBinder arg1)//連接成功時調用
public void onServiceDisconnected(ComponentName arg0)        //連接失敗時調用

    示例如下:

private ServiceConnection conn=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName arg0, IBinder arg1) {
        // TODO Auto-generated method stub
        Toast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();
        Log.i("SERVICE","success");
    }
    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        // TODO Auto-generated method stub
        Toast.makeText(MainActivity.this, "errer", Toast.LENGTH_LONG);
        Log.i("SERVICE","errer");
    }

    

    

Service實例:

    MainActivity.java:

private ServiceConnection conn=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName arg0, IBinder arg1) {
        // TODO Auto-generated method stub
        Toast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();
        Log.i("SERVICE","success");
    }
    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        // TODO Auto-generated method stub
        Toast.makeText(MainActivity.this, "errer", Toast.LENGTH_LONG);
        Log.i("SERVICE","errer");
    }
};
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button1=(Button)this.findViewById(R.id.btn1);
    Button button2=(Button)this.findViewById(R.id.btn3);
    Button button3=(Button)this.findViewById(R.id.btn4);
    Button button4=(Button)this.findViewById(R.id.btn5);
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            startService(new Intent(MainActivity.this,NewService.class));
        }
    });
    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            stopService(new Intent(MainActivity.this,NewService.class));
        }
    });
    button3.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            bindService(new Intent(MainActivity.this,NewService.class),conn,BIND_AUTO_CREATE);
        }
    });
    button4.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            unbindService(conn);
        }
    });
}

NewService.java:

public class NewService extends Service {
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        Toast.makeText(NewService.this, "onBind", Toast.LENGTH_LONG).show();
        Log.i("SERVICE","onbind");
        return null;
    }
    public void onCreate() {
        super.onCreate();
        Log.i("SERVICE","oncreat");
        Toast.makeText(NewService.this, "onCreat", Toast.LENGTH_LONG).show();
    }
    public void onStart(Intent intent,int startId) {
        Log.i("SERVICE","onstart");
        Toast.makeText(NewService.this, "onStart", Toast.LENGTH_LONG).show();
    }
    public void onDestroy() {
        Log.i("SERVICE","ondestory");
        Toast.makeText(NewService.this, "onDestory", Toast.LENGTH_LONG).show();
    }
}

Activity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button android:id="@+id/btn1" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="start"/>
    <Button android:id="@+id/btn3" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="stop"/>
    <Button android:id="@+id/btn4" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="bind"/>
    <Button android:id="@+id/btn5" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="unbind"/>    
</LinearLayout>

AndroidManifest.xml增加:

 <service android:name="com.example.new1.NewService"/>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章