<Service> 简介

Service生命周期方法,如下所示:

  1. IBinder onBind(Intent intent) :该方法是Service子类必须实现的的方法.该方法返回一个 IBinder 对象,应用程序可通过该对象与Service组件通信.
  2. 2.onCreate() :当Service 第一次创建的时候立即调用该方法.
  3. onDestroy():当Service  关闭之前回调该方法.
  4. onStartCommand(Intent intent, int flags, int startId):每次客户端调用startService(intent)方法启动该Service时都会调用该方法.
  5. onUnbind(Intent intent) : 当service 上绑定的所有客户端都断开连接时将会回调该方法.

需要在Activity中启动该service

package com.test.service;

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

/**
 * service 的生命周期
 */
public class FirstService extends Service {
    public FirstService() {
    }

    *必须实现的方法*
    @Override
    public IBinder onBind(Intent intent) {

        Log.d("FirstService", "创建服务 service is onBind");

        return null;
    }

    @Override //service 被创建时回调该方法
    public void onCreate() {
        super.onCreate();

        Log.d("FirstService", "创建服务 service is onCreate");
    }

    @Override //service 被启动时回调该方法
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.d("FirstService", "启动服务 service is onStartCommand");
        return START_STICKY; //return super.onStartCommand(intent, flags, startId);
    }

    @Override   //service 关闭之前回调该方法
    public void onDestroy() {
        super.onDestroy();

        Log.d("FirstService", "关闭服务 service is onDestroy");
    }

    @Override
    public boolean onUnbind(Intent intent) {




        return super.onUnbind(intent);
    }
}

Android中系统中运行Service有如下2种方式:

  1. 通过 Context的 startService(intent) 方法,通过该方法启动service,访问者与Service之间没有关联,即使访问者退出了,service依然运行.
  2. 通过 Context的 bindService(intent) 方法,通过该方法启动service,访问者与Service 绑定在一起了,访问者一旦退出了,service 也就终止了.

package com.test.service;

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

/**
 * service 的简单学习.
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnService = (Button) findViewById(R.id.button);
        Button btnStop = (Button) findViewById(R.id.button2);

        //创建启动 Service的 Intent
        final Intent intent = new Intent();
        intent.setAction("com.test.FIRST_SERVICE");
        intent.setPackage(this.getPackageName());    //兼容Android 5.0

        if (btnService != null) {
            btnService.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //启动服务
                    startService(intent);
                }
            });
        }

        if (btnStop != null) {
            btnStop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //停止服务
                    stopService(intent);
                }
            });
        }
    }
}

在清单文件配置

  <!--配置一个service组件-->
   <application>
        <service
            android:name=".FirstService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <!-- 为该Service组件的intent-filter配置action -->
                <action android:name="com.test.FIRST_SERVICE"/>
            </intent-filter>
        </service>
    </application>
### 事件7036:Service Control Manager的状态变化分析 在Windows事件日志中,事件ID 7036与Service Control Manager(SCM)相关,用于表示服务的状态变化。具体来说,当服务从一个状态转换到另一个状态时,SCM会记录该事件。例如,当Windows Error Reporting Service(WerSvc)从停止状态变为运行状态时,会生成事件7036。 #### 事件的基本结构 事件7036的典型结构如下: - **事件来源**:Service Control Manager - **事件ID**:7036 - **描述**:服务的名称和状态变化。 例如,事件日志中可能包含以下信息: - **服务名称**:Windows Error Reporting Service(WerSvc) - **状态变化**:服务状态从“已停止”变为“正在运行”。 #### Windows Error Reporting Service(WerSvc)简介 Windows Error Reporting Service(WerSvc)是Windows操作系统中的一个关键服务,负责收集和报告系统错误信息。当应用程序或系统发生崩溃或异常时,该服务会生成错误报告,并将其发送到Microsoft或指定的服务器,以便进行分析和改进。 #### 状态变化的意义 事件7036通常表示服务的生命周期状态发生了变化,例如: 1. **启动**:服务从“已停止”变为“正在运行”。 2. **停止**:服务从“正在运行”变为“已停止”。 3. **暂停**:服务从“正在运行”变为“已暂停”。 4. **恢复**:服务从“已暂停”变为“正在运行”。 对于Windows Error Reporting Service而言,状态变化可能具有以下意义: - **启动**:服务开始运行,准备收集错误报告。这通常发生在系统启动时或手动启动服务时。 - **停止**:服务停止运行,不再收集错误报告。这可能发生在系统关闭时或手动停止服务时。 - **暂停/恢复**:服务暂时停止收集错误报告,但在恢复后重新开始工作。 #### 分析事件7036的要点 1. **服务名称**:确认事件涉及的服务是否为Windows Error Reporting Service(WerSvc)。 2. **状态变化**:明确服务的状态变化(例如从“已停止”到“正在运行”)。 3. **时间戳**:检查事件发生的时间,以确定状态变化的时间点。 4. **上下文信息**:查看同一时间段内的其他事件,以了解状态变化的上下文。例如,是否有系统重启、手动服务操作或错误发生。 5. **日志关联**:将事件7036与其他相关事件(如事件6006、6005等)关联,以构建完整的事件链。 #### 示例分析 假设事件日志中记录了以下内容: ``` 事件ID: 7036 来源: Service Control Manager 描述: 服务 "Windows Error Reporting Service" 的状态从 "已停止" 更改为 "正在运行"。 ``` 分析过程如下: 1. **服务名称**:确认事件涉及的服务是Windows Error Reporting Service(WerSvc)。 2. **状态变化**:服务从“已停止”变为“正在运行”,表明服务已启动。 3. **时间戳**:检查事件发生的时间,判断是否与系统启动或手动操作相关。 4. **上下文信息**:查看同一时间段内的其他事件,例如系统启动事件(事件6005)或用户手动启动服务的记录。 5. **日志关联**:查找事件6006(服务启动完成)或事件6005(服务启动开始),以验证服务启动的完整性。 #### 服务状态变化的常见原因 1. **系统启动**:服务在系统启动时自动启动。 2. **手动操作**:用户或管理员手动启动、停止或重启服务。 3. **依赖服务变化**:服务依赖的其他服务状态变化可能导致其状态变化。 4. **系统错误**:服务因错误而停止或重启。 #### 监控与排查建议 1. **定期检查日志**:定期审查事件7036的日志,确保服务状态变化符合预期。 2. **设置警报**:如果服务的意外停止可能影响系统稳定性,可以设置警报以通知管理员。 3. **检查依赖服务**:确保服务依赖的其他服务正常运行。 4. **分析错误报告**:结合Windows Error Reporting Service生成的错误报告,分析潜在的系统问题。 #### 总结 事件7036提供了关于Windows Error Reporting Service状态变化的重要信息。通过分析该事件,可以了解服务的生命周期状态,并结合其他日志信息排查潜在问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值