①:启动StartedService的Activity消亡,service还存在;启动BoundService的Activity消亡,Service也消亡(点击startService开始打印i=0…,按back键(empty process),onUnBind被打印)
②:StartedService和BoundService只要已实例化,就都不会再调用onCreate,但StartedService每次都会再调用onStartCommand,而BoundService若已绑定,则不会再调用onBind
③:音乐播放器用StartedService
本质区别:BoundService存在CS概念,借助Binder通讯
——————/
Service无界面,运行中如何与用户交互?①Toast(本质TextView,用到系统Layout)②StatusBar
Toast
makeText //分析入口点
LayoutInflater inflate = … //将xml转化为view
View v=inflate.inflate(com.android.internal.R.layout.transient_notification,null);//系统xml
TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
tv.setText(text); //text用户传入
如何在Service和多线程间抉择?
逻辑功能上独立长期运行,用service,如下载电影;与当前页面业务紧密相关短时运行,用线程,如下载图片后显示
②:StartedService和BoundService只要已实例化,就都不会再调用onCreate,但StartedService每次都会再调用onStartCommand,而BoundService若已绑定,则不会再调用onBind
③:音乐播放器用StartedService
本质区别:BoundService存在CS概念,借助Binder通讯
——————/
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intent.putExtra("lyl",1); //start
startService(intent);
}
});
pause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intent.putExtra("lyl",2); //pause
startService(intent);
}
});
/*将nr.mp3放在layout/raw/目录下,导致生成apk文件很大*/
public class MyService extends Service {
private MediaPlayer mPlayer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mPlayer=MediaPlayer.create(this,R.raw.nr);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int command=intent.getExtras().getInt("lyl");
switch (command) {
case 1:
mPlayer.start();
break;
case 2:
mPlayer.pause();
break;
}
return Service.START_NOT_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
Activity退出(back),歌曲还在播放,但其process级别低,可能被系统杀死,解决办法:Running a Service in the Foreground
Service无界面,运行中如何与用户交互?①Toast(本质TextView,用到系统Layout)②StatusBar
Toast
makeText //分析入口点
LayoutInflater inflate = … //将xml转化为view
View v=inflate.inflate(com.android.internal.R.layout.transient_notification,null);//系统xml
TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
tv.setText(text); //text用户传入
如何在Service和多线程间抉择?
逻辑功能上独立长期运行,用service,如下载电影;与当前页面业务紧密相关短时运行,用线程,如下载图片后显示