44.android服务service-启动和关闭

Service
运行于后台的一个组件,用来运行适合运行在后台的代码,可以视为没有界面的activity
进程的优先级:

1.Foreground process:前台进程,

*拥有一个正在与用户交互的activity的进程onResume方法被调用。

*拥有一个与正在和用户交互的activity绑定的服务的进程

*拥有一个正在“运行于前台”的服务-服务的startforeground()被调用。

*拥有执行以下三个周期方法中任意一个的服务(onCreate(),onStart(),onDestroy()

*拥有一个正在执行onReceive方法的广播接收者的进程

2.visible process:可见进程,

*拥有可见没有焦点的activy,onPause方法被调用。

*拥有一个与可见(或者前台)activity绑定的服务进程

3.Service process:服务进程,通过startService启动的服务
4.background process:后台进程,拥有一个不可见的activity(onStop方法被调用)的进程

5.Empty process:空进程,没有任何活动的应用组件的进程(activity已经退出了)

服务的生命周期

1.通过Context.startService()启动服务
onCreate()-->onStart()-->onDestroy()
onCreate()在创建服务时调用,如果调用多次startService(),onCreate()方法仍然只被调用一次;
onStart()在开始startService()调用时被调用,多次startService(),onStart()方法会被调用多次;
onDestroy()在终止服务时调用;
2.通过Context.bindService()启动服务
onCreate()-->onBind()-->onUnbind()-->onDestroy()
onBind()在绑定服务时调用,如果调用多次bindService(),则onBind()方法只被调用一次;
onUnbind()在解除绑定(unBindService)时调用;
	//服务创建的额时候被调用
	@Override
	public void onCreate(){
		super.onCreate();
		System.out.println("onCreate方法被调用");
	}
	
	//可见没有焦点的时候调用,因为服务本身没有焦点,这个方法过时了,现在都用下面的onStartCommand方法
	@Override
	public void onStart(Intent intent, int startId){
		super.onStart(intent, startId);
		System.out.println("onStart方法被调用");
	}
	
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId){
		System.out.println("onStartCommand方法被调用");
		return super.onStartCommand(intent, flags, startId);
	}
	
	//服务销毁的时候调用
	@Override
	public void onDestroy(){
		super.onDestroy();
		System.out.println("onDestroy方法被调用");
	}
开启一个服务和关闭一个服务
配置文件:
<service android:name="com.ldw.startService.MyService"></service>
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开启服务" 
        android:onClick="click"
        />
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="关闭服务" 
        android:onClick="click2"
        />


</LinearLayout>
MyService.java
package com.ldw.startService;


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


public class MyService extends Service {


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


}

MainActivity.java

package com.ldw.startService;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;


public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v){
    	//显示启动服务
    	Intent intent = new Intent(this, MyService.class);
    	startService(intent);
    }
    
    public void click2(View v){
    	//关闭服务
    	Intent intent = new Intent(this, MyService.class);
    	stopService(intent);
    }
    
}






  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值