Service的学习(一)

介绍:service在后台执行,没有与用户交互的界面,常见的例子:音乐播放器。

启动的方式:

(1)startService():调用者和服务之间没有联系,即使调用者退出了,服务仍然进行[onCreate()->onStartCommand()->startService()->onDestory()],主要用于启动一个服务执行后台任务,Service和访问者之间不进行通信、数据交换,停止服务使用stopService(),希望Service组件做某些事情,可以在onCreate或onStartCommand方法中定义相关业务代码。

onStartCommand返回值是int类型的,只能有三种:

  •   START_STICKY:当服务进行在运行时被杀死,系统会把它置为started状态,但是并不保存其传递的Intent对象
  • START_NOT_STICKY:当服务进行在运行时被杀死,并且没有新的Intent对象传递过来,系统会把它置为started状态,但是并不会再次创建进程,直到startService(Intent)方法被调用。
  •   START_REDELIVER_INTENT:当服务进行在运行时被杀死,它将会间隔一段时间后重新被创建,并且最后一个传递的Intent对象将会再次传递过来。

(2)bindService():调用者和服务绑在一起,调用者一旦退出,服务也就终止[onCreate()—>onBlind()—>onUnbind()—>onDestory()],该方法启动的服务和访问者之间可以进行通信或数据交换,停止服务使用unbindService。

bindService()方法的完整形式是:bindService(Intent service, ServiceConnection conn, int flags)三个参数解释如下:

  • service:该参数通过Intent指定要启动的Service。
  • coon:该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的连接情况。当访问者与Service之间连接成功时将回调该ServiceConnection对象的onServiceConnected(ComponentName name,IBinder service)方法;当访问者与Service之间由于某种意外断开连接时将回调ServiceConnection对象的onServiceDisconnected(ComponentName name)方法,一般断开调用unbind(),不回调onServiceDisconnected
  • flags:指绑定时是否自动创建Service(如果Service还未创建)。该参数可指定为0(不自动创建)或为BIND_AUTO_CREATE

下面介绍startService()启动service:

(1)创建一个服务Service:

package com.syz.startservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class Myservice extends Service {
	

	private static final String TAG = "Myservice";

	@Override
	public void onCreate() {
		Log.i(TAG, "Myservice-->onCreate()");
		super.onCreate();
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i(TAG, "Myservice-->onStartCommand()");
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public void onDestroy() {
		Log.i(TAG, "Myservice-->onDestroy()");
		super.onDestroy();
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

}

(2)在Activity的布局文件中创建两个Button分别表示:启动Service和终止Service


<Button
        android:id="@+id/StartService"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" 
        />
     <Button
        android:id="@+id/StopService"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world1" 
        />


(3)在Activity中调用Service:

package com.syz.startservice;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
      private Button StartService=null;
      private Button StoptService=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		StartService=(Button)findViewById(R.id.StartService);
		StoptService=(Button)findViewById(R.id.StopService);
		StartService.setOnClickListener(listener);       //设置监听
		StoptService.setOnClickListener(listener);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	private OnClickListener listener =new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			Intent intent =new Intent();
			intent.setClass(MainActivity.this, Myservice.class);
			switch (v.getId()) {                            //用于判断按钮是哪一个按下,从而决定是启动还是终止服务
			case R.id.StartService:
				startService(intent);
				break;
			case R.id.StopService:
				stopService(intent);
				break;
			default:
				break;
			}
		}
	};
}


(4)在AdroidMainfest.xml中注册MyService:

<service
            android:name="com.syz.startservice.Myservice">
        </service>


 

其中<service

                           </service>与<activity

                                                               </activity>平级

 

           

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值