2017-06-30 25 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

ここでこのサービスを呼びますか?アンドロイドのgetSystemServiceが動作しない方法はありません。アクセス権を追加するか、メソッドを呼び出すことを忘れただけかもしれません。 –

+0

私は、このサービスを別のアクティビティからSenddata_1という名前で呼び出しています。 – Pagar

+0

このメソッドは、onStartCommand内でコンストラクタには使用しないでください。新しいオブジェクトを作成して直接サービスを呼び出すことはできません。この場合、コンテキストはnullになります。このような活動の中であなたのサービスを呼び出す: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

関連する問題