Android:getSystemService(Context.ACTIVITY_SERVICE)在Service中不起作用

时间:2017-06-30 13:54:48

标签: android activity-manager

我遇到了一个我无法理解的奇怪问题,因为该应用程序没有提供任何崩溃日志或任何其他我可以关注的消息来搜索问题。

我从我的活动启动服务,在这项服务中,我试图找出处于错误状态但当我的代码到达行时的进程数

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

然后该应用程序停止工作。当我调试我的应用程序时,我发现在点击上面的行后,调试器导航到cleanUpPendingRemoveWindows()中的文件ActivityThread.java,并显示消息“源代码与字节代码不匹配”。我无法理解为什么会这样?

我的代码是:

import android.app.ActivityManager;
import android.app.Service;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

public class Senddata_1 extends Service {

String TAG = "uEarn:Senddata_1";

public void find_out_process_in_error_state(){

    List<ActivityManager.ProcessErrorStateInfo> processErrorStateInfos;

    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

    processErrorStateInfos = am.getProcessesInErrorState();

    if(processErrorStateInfos != null) {
        for (ActivityManager.ProcessErrorStateInfo pes : processErrorStateInfos) {
            Log.e(TAG, "Process in Error state" + pes.processName);
            Log.e(TAG, "Process error messga" + pes.shortMsg);

            message = message + "<p>Process in Error state:" + pes.processName + ", error message:" + pes.shortMsg + "</p>\n";
        }
    }
    return;
}

 public Senddata_1() {

    // TODO: Get the Filename through the intent

    Log.e(TAG, "Inside service Senddata_1");

    find_out_process_in_error_state();

}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
   //        return;
}
}

1 个答案:

答案 0 :(得分:1)

  

该应用程序不会提供任何崩溃日志或任何其他我可以关注的消息来搜索问题。

哦,我强烈怀疑它确实如此。

  

当我的代码到达该行时...然后该应用停止工作。

这是因为您在Service方法中调用super.onCreate()之前尝试调用从onCreate()继承的方法。最典型的例外是NullPointerException

将构造函数替换为:

@Override
public void onCreate() {
  super.onCreate();
  find_out_process_in_error_state();
}

然后,当您启动该服务时,系统会调用find_out_process_in_error_state()方法,以便它可以安全地拨打getSystemService()