Service学习
Service简答的服务(开启、关闭)
MyService
New-service-service命名为MyService
添加如下代码
@Override
public void onCreate() {//创建
super.onCreate();
Log.i("LXH","onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {//开启
Log.i("LXH","onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {//销毁
super.onDestroy();
Log.i("LXH","onDestroy");
}
main.xml
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="服务" />
<Button
android:id="@+id/btnStartService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动服务" />
<Button
android:id="@+id/btnStopService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止服务" />
MainActivity
public class MainActivity extends AppCompatActivity {
Button btnStartService;
Button btnStopService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStartService=findViewById(R.id.btnStartService);
btnStopService=findViewById(R.id.btnStopService);
btnStartService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//通过 intent 启动 service
startService(new Intent(MainActivity.this, MyService.class));
}
});
btnStopService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//关闭
stopService(new Intent(MainActivity.this, MyService.class));
}
});
}
}
运行
点击启动服务:onCreate->onStartCommand
点击关闭服务:onDestroy
复杂一点的服务(开启、关闭、绑定、解除)
raw/yue.mp3
new-Directory 命名raw,放入音乐文件yue.mp3
MusicService
public class MusicService extends Service {
public MusicService() {
}
private MediaPlayer mPlayer;
public final IBinder mBinder=new LocalBinder();
public class LocalBinder extends Binder {// 在Binder中定义一个自定义的接口用于数据交互
}
@Override
public void onCreate() {
Log.i("LXH", "MusicService_onCreate");
mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.yue);
mPlayer.setLooping(true);//重复播放
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("LXH", "MusicService_onStartCommand()");
mPlayer.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i("LXH", "MusicService_onDestroy()");
mPlayer.stop();
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i("LXH", "MusicService_onUnbind()");
mPlayer.stop();
return super.onUnbind(intent);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
Log.i("LXH", "MusicService_onBind()");
mPlayer.start();
return mBinder;//绑定服务,把当前服务的IBinder对象的引用传递给宿主
// throw new UnsupportedOperationException("Not yet implemented");
}
}
main.xml
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="音乐播放服务"/>
<Button
android:id="@+id/startMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开启音乐播放服务"/>
<Button
android:id="@+id/stopMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止音乐播放服务"/>
<Button
android:id="@+id/bindMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绑定音乐播放服务"/>
<Button
android:id="@+id/unbindMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="解除绑定音乐播放服务"/>
MainActivity
public class MainActivity extends AppCompatActivity {
Button startMusic;
Button stopMusic;
Button bindMusic;
Button unbindMusic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
stopMusic=findViewById(R.id.stopMusic);
startMusic=findViewById(R.id.startMusic);
bindMusic=findViewById(R.id.bindMusic);
unbindMusic=findViewById(R.id.unbindMusic);
startMusic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("LXH", "startMusic_onClick");
startService(new Intent(MainActivity.this, MusicService.class));
}
});
stopMusic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("LXH", "stopMusic_onClick");
stopService(new Intent(MainActivity.this, MusicService.class));
}
});
bindMusic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("LXH", "bindMusic_onClick");
//绑定服务//connection=null表示不进行数据传递,BIND_AUTO_CREATE启动bindSerive conn为服务链接对象
bindService(new Intent(MainActivity.this, MusicService.class), conn, Context.BIND_AUTO_CREATE);
}
});
unbindMusic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("LXH", "unbindMusic_onClick");
unbindService(conn); //解除绑定
}
});
}
ServiceConnection conn = new ServiceConnection() {// 定义服务链接对象
@Override
public void onServiceDisconnected(ComponentName name) {
// Toast.makeText(ServiceTestActivity.this,"onSeviceDisconnected",Toast.LENGTH_SHORT).show();
Log.e("service", "MusicServiceActivity onSeviceDisconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// Toast.makeText(ServiceTestActivity.this,"onServiceConnected", Toast.LENGTH_SHORT).show();
Log.e("service", "MusicServiceActivity onServiceConnected");
}
};
}
运行
运行结果及代码
有需要项目链接: Service .也可以私信邮箱我看到就发
欢迎指错,一起学习