2017-06-30 418 views
1

我遇到了一个奇怪的问题,我无法理解,因为该应用没有给出任何碰撞日志或任何其他消息,我可以按照它来搜索问题。Android:getSystemService(Context.ACTIVITY_SERVICE)在服务中不起作用

我发动从我的活动,在这个服务我试图找出哪些是处于错误状态,但是当我的代码达到行

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; 
} 
} 
+0

你在哪里打这个服务?有没有办法android getSystemService不工作,也许你需要添加权限或只是忘记调用方法 –

+0

我从另一个活动调用此服务名为Senddata_1。 – Pagar

+0

你应该在onStartCommand中使用这个方法而不是构造函数。您不能通过创建新对象直接调用服务。在这种情况下,上下文将为空。在这样的活动中调用你的服务:startService(new Intent(this,Senddata_1 .class)); –

回答

1

应用程序不提供任何崩溃日志或者我可以按照搜索的问题,任何其他消息。

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

当我的代码到达行......那么应用程序停止工作。

那是因为你想在你onCreate()方法调用super.onCreate()之前调用从Service继承的方法。最典型的例外将是NullPointerException

替换为你的构造:

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

然后,当您启动该服务,您的find_out_process_in_error_state()方法将被调用,当它应该是安全的它打电话getSystemService()

+0

感谢您的建议。它的确按照你的建议替换了构造函数。 – Pagar