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
@DeeV我嘗試在'onDestroy()'中將它設置爲null,但是我得到了'NullPointerException' – Newbie
保存對使用'addPrimaryClipChangeListener'放入的Listener的引用,然後使用'removePrimaryClipChangedListener(ClipboardManager.OnPrimaryClipChangedListener) ' – DeeV