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();
}
すべてが正常に動作します私のサービスであり、唯一のサービスは停止しません、なぜですか?サービスを停止した後、何かをコピーすると、意図がまだポップアップするため、サービスが停止していないことがわかります。
のように使用します。これは実際にはメモリリークです。 – DeeV
@DeV 'onDestroy()'にnullを設定しようとしましたが、 'NullPointerException'を取得しました – Newbie
' addPrimaryClipChangeListener'で入れたリスナーへの参照を保存し、 'removePrimaryClipChangedListener(ClipboardManager.OnPrimaryClipChangedListener) ' – DeeV