20.1安卓的服务Service开启关闭方法

服务Service从一定的角度来看,可以将其理解为没有界面的Activity,

Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy

其中服务还分为两种使用,

第一种是开启关闭,第二种是绑定和解绑,

开启服务(startService)

服务一旦开启就与调用者没有任何关系, 当调用者Activity退出时,服务仍在运行,不会影响后台service的运行。

在Activity中不能调用服务里面的方法

绑定服务(bindService)

通过绑定方式开启服务,服务跟服务不求同生,但求同死。如果调用者的Activity退出了,那他绑定的服务也会跟着退出。

在Activity中能调用服务里面的方法

第一种,开始就执行oncreate,和onstart,结束时直接destroy,

而且调用者退出的时候这个服务不会退出,下次调用者再次上线时,依然可以关闭这个服务

就是说这个服务可以独立生活

第一种现象是这样

通过现象我们可以看出,运行的三种情况

1.这个服务从来都没有使用过,执行的是创建和启动两步,

2.服务创建过,且没有被销毁,那么点击开服务只能执行 “启动” 一步,

3.当关闭了服务的时候,点击开启又开始了重新的创建和启动

4.没有了服务点击关闭服务是哪个都不执行的

实现思路:新建一个Service,像我们新建Activity一样新建,让他继承Service,

然后去mainfest中给他注册一下。

package com.example.xialm.service_21tolog;

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

/**
 * Created by xialm on 2019/11/7.
 */
public class MyOwnService extends Service {

    private int i1,i2,i3,i4;

    //只有创建的时候会被调用
    @Override
    public void onCreate() {

        i1++;
        Log.i("日志","我创建了第"+i1+"次");

    }

    //每次运行的时候都会被调用
    @Override
    public void onStart(Intent intent, int startId) {
        i2++;
        Log.i("日志","我运行了第"+i2+"次");

    }

    //每次关闭的时候都会被调用。
    @Override
    public void onDestroy() {
        i3++;
        Log.i("日志","我结束了第"+i3+"次");

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

mainactivity代码

package com.example.xialm.service_21tolog;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button b_open;
    private Button b_close;

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

        b_open = (Button)findViewById(R.id.b_1);
        b_close = (Button)findViewById(R.id.b_2);

        b_open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("fuwu1");
                //自安卓5.0以来就需要添加获得包的名字,
                //兼容Android 5.0,5.0之后需要设置包名,
                // 这是为了防止造成冲突(有多个Service用同样的intent-filter的情况),这里相对的是不同的包之间
                //注意是开始服务不是开始Activity
                intent.setPackage(getPackageName());
                startService(intent);
            }
        });

        b_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent("fuwu1");
                intent.setPackage(getPackageName());
                //Log.i("当前包", getPackageName());
                stopService(intent);
            }
        });

    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="com.example.xialm.service_21tolog.MainActivity">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:id="@+id/b_1"
        android:layout_below="@+id/tv1"
        android:text="开服务"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/b_2"
        android:layout_below="@+id/b_1"
        android:text="关服务"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

原文地址:https://www.cnblogs.com/gzyx/p/11811111.html

时间: 2024-08-15 08:43:16

20.1安卓的服务Service开启关闭方法的相关文章

MySQL配置文件以及服务的开启关闭重启

linux系统中,配置文件路径一般为/etc/my.cnf [[email protected] ~]# mysql --help|grep my.cnf                       order of preference, my.cnf, $MYSQL_TCP_PORT,/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf [[email protected] ~]# cat /etc/my.cnf[mysqld]datadir=/var/lib/my

安卓服务(Service)的两种开启方式以及服务的生命周期

安卓中服务的开启方式 一:採用start的方式开启服务 调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy() 特点:服务被开启后不会反复开启,仅仅会调用onStart(),服务仅仅会被停止一次. 二:採用bind的方式开发服务 调用函数:bindService(Intent-)->onCreate()->onBind()->onUnBind()->onDestr

LINUX服务开启关闭建议

1.操作系统centos5.5 服务名称 功能 默认 建议 备注 NetworkManager 用于自动连接网络 关闭 关闭 对服务器没用 acpid 电源的开关等检测管理 开启 关闭 对服务器没用 anacron 一种计划任务管理 开启 开启 apmd 高级电源管理 开启 开启 atd 在指定时间执行命令 开启 关闭 如果用crond,则可关闭它 auditd 开启 自定 如果用selinux,需要开启它 autofs 文件系统自动加载.卸载 开启 自定 只在需要时开启它,可以停止 avahi

安卓第十三天笔记-服务(Service)

安卓第十三天笔记-服务(Service) Servcie服务 1.服务概念 服务 windows 服务没有界面,一直运行在后台, 运行在独立的一个进程里面 android 服务没有界面,一直运行在后台,默认是运行当前的应用程序进程里面. 2.建立服务 建立一个类继承Service类 public class ServiceDemo extends Service { 在清单文件中注册service <service android:name="com.ithiema.servicequic

【Mongodb教程 第一课 补加课1 】windows7 下安装mongodb 开启关闭服务

mongodb在2.2版本开始就不支持windows xp了(我想现在用xp的应该也是带着情怀的一部分人吧,我只是一个工匠而已),windows下server8 R2,64位,32位,只是32位只支持数据库小于2GB.①检测是多少位的系统(方法不局限于此) 1 wmic os get osarchitecture ②下载mongodb 1 http://www.mongodb.org/downloads ③安装mongodb安装时选择好你所安装的路径,我选择的是D:\mongodb④创建一个数据

Android -- Service的开启关闭与生命周期

Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化等等. 生命周期                                                                                  context.startService() 启动流程: con

windows bat命令 开启关闭Oracle服务

函数功能:该函数将一个字符串转为字形下标的数组.此函数可用来确定一种字体里是否存在某个字形 控制台下代码: #include "stdafx.h" #include <windows.h> #include"stdio.h" void main() { char ch[] = {'0'}; WORD chnl[20] = {0}; HDC hdc; hdc = GetWindowDC(0); int n = GetGlyphIndicesA(hdc,ch

批处理开启/关闭软件服务源码

批处理使用方法:将代码复制到记事本文件里,然后修改文件后缀为*.bat格式. SQL server2008 服务 开启服务批处理: @echo off sc start MSSQLFDLauncher sc start MSSQLSERVER sc start MSSQL$SQLEXPRESS sc start MSSQLServeroLAPService sc start SQLBrowser sc start MsDtsServer100 sc start SQLSERVERAGENT sc

Linux虚拟机SSH服务、防火墙开启关闭

1.查看SSH服务 serveice sshd status --> Checking for service sshd running 2.开启SSH服务 service sshd start --> starting SSH daemon 3.临时关闭防火墙(环境重启之后,防火墙又会关闭) rcSuSEfirewall2 stop 4.永久关闭防火墙 chkconfig SuSEfirewall2_init off chkconfig SuSEfirewall2_setup off 分操作