2016-11-21 7 views
0

私はClipboard.classという名前のサービスを実装しています。このサービスは、ユーザのコピー/カット時にインテントをポップアップ表示します。ボタンをクリックするとMainActivity.javaからサービスを実行して停止します。私は停止ボタンをクリックしたときアンドロイドサービスは停止しません

@OnClick(R.id.btn) 
public void runService() 
{ 
    Intent service = new Intent(this, Clipboard.class); 
    run = Clipboard.running == 1 ? true:false; 
    if(!run) 
    { 
     startService(service); 
     btn.setText("Tap to stop"); 
    } 
    else 
    { 
     stopService(service); 
     btn.setText("Tap to run"); 
    } 
} 

が、これはClipboard.class

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    running = 1; 
    Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show(); 
    mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
    mCM.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() 
    { 
     @Override 
     public void onPrimaryClipChanged() { 
      String newClip = mCM.getText().toString(); 
      Toast.makeText(getApplicationContext(), newClip.toString(), Toast.LENGTH_LONG).show(); 

      Intent dialogIntent = new Intent(Clipboard.this, ShareTo.class); 
      dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(dialogIntent); 
     } 
    }); 
    return mStartMode; 
} 

@Override 
public void onDestroy() 
{ 
    running = 0; 
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show(); 
    super.onDestroy(); 
} 

すべてが正常に動作します私のサービスであり、唯一のサービスは停止しません、なぜですか?サービスを停止した後、何かをコピーすると、意図がまだポップアップするため、サービスが停止していないことがわかります。

+0

のように使用します。これは実際にはメモリリークです。 – DeeV

+0

@DeV 'onDestroy()'にnullを設定しようとしましたが、 'NullPointerException'を取得しました – Newbie

+1

' addPrimaryClipChangeListener'で入れたリスナーへの参照を保存し、 'removePrimaryClipChangedListener(ClipboardManager.OnPrimaryClipChangedListener) ' – DeeV

答えて

0

)のGoogleドキュメントAndroid Service

サービスは、この時点でContext.stopService()またはstopSelf(まで実行を継続しますからが呼び出されます。

ので、あなたは主クリップ変更リスナーを削除していないこの

Intent service = new Intent(this, Clipboard.class); 
run = Clipboard.running == 1 ? true:false; 
if(!run) 
{ 
    startService(service); 
    btn.setText("Tap to stop"); 
} 
else 
{ 
    context.stopService(service); 
    btn.setText("Tap to run"); 
} 
関連する問題