Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android的Service

Android的Service

編輯:關於Android編程

原來總感覺四大組建Service和Broadcaster Receiver用的少,其實不然,只是因為比較抽象,他們總是默默無聞的在後台進行服務

寫了個demo測試了一下,一個是生命周期,一個是綁定服務,解綁服務,感覺這個用mp3播放比較形象

下面是工程列表,感覺在順序上不只是Eclipse還是google調整了一下

\

MainActivity.class

package cn.edu.sjzc.fanyafeng.activity;


import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import cn.edu.sjzc.fanyafeng.service.MyService;
import cn.edu.sjzc.fanyafeng.servicedemo.R;


public class MainActivity extends Activity implements OnClickListener {


private Button start, end, bind, unbind;


private static String TAG = "生命周期";


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


Log.i(TAG, "onCreate方法執行");


initView();
}


private void initView() {
this.start = (Button) MainActivity.this.findViewById(R.id.start);
this.start.setOnClickListener(this);


this.end = (Button) MainActivity.this.findViewById(R.id.end);
this.end.setOnClickListener(this);


this.bind = (Button) MainActivity.this.findViewById(R.id.bind);
this.bind.setOnClickListener(this);


this.unbind = (Button) MainActivity.this.findViewById(R.id.unbind);
this.unbind.setOnClickListener(this);


}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub


Intent intent = new Intent(MainActivity.this,MyService.class);

switch (v.getId()) {
case R.id.start:


startService(intent);

break;
case R.id.end:

stopService(intent);


break;
case R.id.bind:


bindService(intent, conn, BIND_AUTO_CREATE);

break;
case R.id.unbind:


unbindService(conn);

break;


default:
break;
}


}

final ServiceConnection conn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub

}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub

}
};
}

 

MyService.java

package cn.edu.sjzc.fanyafeng.service;


import cn.edu.sjzc.fanyafeng.servicedemo.R;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;


public class MyService extends Service {
// 定義輸入日志
private static String TAG = "生命周期";
// 定義音樂播放變量
private MediaPlayer mPlayer;

private MyBinder mBinder = new MyBinder();


@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i(TAG, "onBind()執行");
// mPlayer.start();
return mBinder;
}


@Override
public void onCreate() {
// TODO Auto-generated method stub
Log.i(TAG, "onCreate()執行");//第一個執行
//R.raw.xxxx其中raw不能換成其他的名稱,不然Android識別不出來,囧
mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.qimiaozhongdejiyi);
//設置音樂循環播放,這個大家可以想一下Handler其中的Looper
mPlayer.setLooping(true);
super.onCreate();
}




@Override
public void onDestroy() {
// TODO Auto-generated method stub
Log.i(TAG, "onDestroy()執行");//停止播放時執行
mPlayer.stop();
super.onDestroy();
}




@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i(TAG, "onStartCommand()執行");//第二個執行
mPlayer.start();
return super.onStartCommand(intent, flags, startId);
}





@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
Log.i(TAG, "onUnbind()執行");
return super.onUnbind(intent);
}


@SuppressWarnings("deprecation")
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
//onStart方法被谷歌打上了橫槓,不建議大家使用
Log.i(TAG, "onStart()執行");//第三個執行
//start()方法放在onStartCommand
// mPlayer.start();
super.onStart(intent, startId);
}

public class MyBinder extends Binder{
MyService getService(){
return MyService.this;
}
}


}

 

xml文件

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >


android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />


android:id="@+id/unbind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/bind"
android:layout_alignBottom="@+id/bind"
android:layout_alignParentRight="true"
android:layout_marginRight="88dp"
android:text="解綁" />


android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_toLeftOf="@+id/unbind"
android:text="開啟音樂播放" />


android:id="@+id/bind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/start"
android:layout_below="@+id/end"
android:layout_marginTop="22dp"
android:text="綁定Service" />


android:id="@+id/end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/start"
android:layout_below="@+id/start"
android:layout_marginTop="16dp"
android:text="停止音樂播放服務" />



 

 

最重要的不要忘記注冊,Android的四大組建都需要注冊

以下是demo的運行\

\

 

這樣程序就可以後台運行了

 

下面是程序日志幫助大家理解生命周期\

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved