2011-10-21 3 views
0

がこれについて多くの質問をしていますが、これを修正することはできません。どうすればRECEIVE_BOOT_COMPLETEDサービス

私はこのコードを持って

public class myBroadcastReceiver extends BroadcastReceiver { 
private final String TAG = "myBroadcastReceiver"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equals(Consts.ANDROID_INTENT_ACTION_BOOT_COMPLEATE)){ 
    Intent newinIntent = new Intent(context, ServiceBootCompleated.class); 
    context.startService(newinIntent); 
    } 
    } 
} 

それはService起動し、「私はreturn START_NOT_STICKY;が実行されていることがわかり

android.os.Debug.waitForDebugger(); 

このラインを使用してデバッグすることができますが、それでも サービスはとして表示されています セッティング>プログラム>実行中のサービスで実行中のサービス

私が手動で停止しない限り、は呼び出されません。
私はそれを止めるために何をしなければなりませんか?
"Setttings> programs> Running Services"ウィンドウからそれを削除しますか?あなたはstopSelf()

はあなたがサービスで行う任意の実際の作業はのonCreateまたはonStartCommandにバックグラウンドスレッドとして行われていないことを確認し、バックグラウンドの呼び出しでやってみたかった仕事を完了したら

答えて

3

サービスライフサイクルの詳細については、http://developer.android.com/reference/android/app/Service.html#ServiceLifecycleを参照してください。

例:

public int onStartCommand(final Intent intent, final int flags, final int startId) 
{  
    Thread thread = new Thread(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
        //do work 
       stopSelf(); 
     } 
    },"MyWorkerThread"); 
    thread.start(); 
    return Service.START_NOT_STICKY; 
} 
+0

私はstopSelfを呼んでください()と作業がonStartCommandで実行されています。このコードは、MySqlの整合性をチェックするわずかな行です。私はそれをスレッドに移動します。ありがとう – Erik

+0

私はstopSelf()を置くべきですか? thread.run();の後のonStartCommandでまたはこのctx.stopSelf()のようなrun(); – Erik

+1

onStartCommandが(メインスレッドから)stopSelfを呼び出すと、onStartCommandが復帰するまでサービスが開始されていないと考えられます。私は通常、作業の完了時に別のスレッドから呼び出しています。 – cistearns

0

は、タスクの完了時に、あなたが結合していないこのタイプのサービスを停止するcontext.stopServiceを()しなければなりません。

よろしく、
SSuman185

関連する問題