android service 生命周期2




Service生命周期 onCreate()-------->onStartCommand()----------->onDestroy()

startService()启动一个服务后,如果服务没有写线程,则会导致主线程阻塞!

 

 

//

Android中启动另外一个应用的Activityservicebroadcast方式如下:

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;

}

 

}

 

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值