2017-05-29 16 views
0

サービスのプロセス属性android:をテストするための簡単なアプリケーションがあります。だから私のサービスは、次のようになります。android:serviceが起動しないサービス

public class MyService extends IntentService { 
    static final String TAG = "MyService"; 

    public MyService() { 
     super("MyService"); 
    } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d(TAG,"onCreate()"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     doJob(); 
     return START_STICKY; 
    } 

    private void doJob() { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       Log.i(TAG,"job started"); 

       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Log.i(TAG,"job stopped"); 

       stopSelf(); 
      } 
     }).start(); 
    } 
} 

私は次のように活動からサービスを開始しようとしている:

findViewById(R.id.startServiceBtn).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startService(new Intent(getApplicationContext(),MyService.class)); 
      } 
     }); 

すべてが正常に動作します。今、私はandroid:process = ":service"属性をマニフェストのサービス宣言に追加しています。そしてそのサービスが始まった後ではありません。だからなぜ、私は別のプロセスでサービスを開始するために変更する必要がありますか?

+0

のおかげで、あなたのサービスが実行されている場合はどのようにチェックしましたか? – F43nd1r

+0

あなたの問題ではありませんが、インテントサービスを間違って使用しています。インテントサービスのためにonStartCommandで何もしてはいけません。それはすべてonHandleIntentにあるべきです。 onStartCommandでそれを行うことで、IntentServiceの組み込みの要求処理メソッドが破られてしまいます。 –

+0

@ F43nd1rスタジオでアンドロイドモニタタブを使用してチェックしています。サービスはdoJob()メソッドを起動して、メッセージをlogcatに出力します。これらのメッセージが表示された場合は、サービスが実行中であることを意味します。 – borune

答えて

0

あなたはこのタスク、つまりonHandleIntent()でdowork()メソッドを呼び出す必要があると思います。あなたのサービスクラスがサービスの代わりにインテントサービスを拡張しているからです。

public class MyService extends IntentService { 
static final String TAG = "MyService"; 

public MyService() { 
    super("MyService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
doJob(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 


} 

private void doJob() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Log.i(TAG,"job started"); 

      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      Log.i(TAG,"job stopped"); 

      stopSelf(); 
     } 
    }).start(); 
} 

}

+0

あなたは正しく実装していますが、それは彼の問題ではありません。 –

+0

@Sandeep KumarはonStartCommandからdoHobをonHandleIntentに置き換えていません – borune

0

ああ申し訳ありません、それは愚かな間違いだった - 私はアンドロイドのモニタ]タブで新しいプロセスを選択する必要があります)すべての

関連する問題