Service生命周期 onCreate()-------->onStartCommand()----------->onDestroy()
startService()启动一个服务后,如果服务没有写线程,则会导致主线程阻塞!
//
Android中启动另外一个应用的Activity,service,broadcast方式如下:
public void onClick(View v) {
//这些代码是启动另外的一个应用程序的主Activity,当然也可以启动任意一个Activity
ComponentName componetName = new ComponentName(
//这个是另外一个应用程序的包名
"com.example.android_4",
//这个参数是要启动的Activity
"com.example.android_4.Two");
try {
Intent intent = new Intent();
intent.setComponent(componetName);
startActivity(intent);
} catch (Exception e) {
// Toast.makeText(getApplicationContext(), "可以在这里提示用户没有找到应用程序,或者是做其他的操作!", 0).show();
}
}
});
必须要安装在系统上的应用。
IntentService生命周期:
onCreate()------->onStartCommand()--------->onHandleIntent()--------->onDestroy()
public class MyIntentService extends IntentService {
/**
* @param name
*/
public MyIntentService() {
//必须!重要!!!
super("android_5");
// TODO Auto-generated constructor stub
}
private void display(){
for(int i=0;i<50;i++){
try {
Thread.sleep(1000);
Log.i("MyIntentService ", i+"<<<");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void onCreate() {
Log.i("MyIntentService", "onCreate()");
super.onCreate();
}
@Override
public void onDestroy() {
Log.i("MyIntentService", "onDestroy()");
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("MyIntentService", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.i("MyIntentService", "onBind");
//必须!重要!!!
return super.onBind(arg0);
}
//开一个线程
@Override
protected void onHandleIntent(Intent arg0) {
Log.i("MyIntentService", "onHandleIntent");
display();
}
}
用bindService启动一个服务,该服务和activity是绑定在一起的:启动时,先调用onCreate()------>onBind()--------->onServiceConnected()
在执行的过程中按back键盘无效,按Home键继续执行!
Client:
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,MyService3.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
});
ServiceConnection conn=new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
Log.i("MyService3", "onServiceDisconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.i("MyService3", "onServiceConnected");
//内部类
MyBinder mBinder=(MyBinder)service;
mBinder.display();
//转换成指定类型外部类
MyService3 t=mBinder.getService();
t.test();
}
};
Service:
public class MyService3 extends Service {
private MyBinder mBinder=new MyBinder();
//内部类方式
public class MyBinder extends Binder{
public void display(){
for(int i=0;i<50;i++){
try {
Thread.sleep(1000);
Log.i("MyService3 ", i+"<<<");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public MyService3 getService(){
//外部类返回
return MyService3.this;
}
}
public void test(){
for(int i=0;i<20;i++)
Log.i(" MyService3", "hello_world<<<<<");
}
@Override
public void onCreate() {
Log.i("MyService3", "onCreate()");
super.onCreate();
}
@Override
public void onDestroy() {
Log.i("MyService3", "onDestroy()");
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("MyService3", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
//想client暴露接口IBinder是接口,Binder是类
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.i("MyService3", "onBind()");
return mBinder;
}
}
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//解除绑定
unbindService(conn);
}
});
@Override
public boolean onUnbind(Intent intent) {
Log.i("MyService3", "onUnbind()");
return super.onUnbind(intent);
}
播放音乐
//播放音乐
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,MusicService.class);
startService(intent);
}
});
public class MusicService extends Service {
@Override
public void onCreate() {
Log.i("MyService", "onCreate()");
super.onCreate();
}
@Override
public void onDestroy() {
Log.i("MyService", "onDestroy()");
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("MyService", "onStartCommand");
MediaPlayer player= MediaPlayer.create(this,com.example.android_5.R.raw.abc);
player.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}