我需要在2分鐘后調用一個方法。我已經嘗試過處理程序和計時器,但是當應用程序關閉時它不起作用。然后我有呼叫計時器在服務中,單擊按鈕即可啟動服務,并在2分鐘后停止服務。它可以工作,但問題是服務有時會自行調用。下面是我的代碼。MyService類別public class MyService extends Service {private static Retrofit retrofit = null;@Overridepublic IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented");}@Overridepublic void onCreate() { new CountDownTimer(120000, 1000) { public void onTick(long millisUntilFinished) { Log.d("message", "start"); } public void onFinish() { Log.d("message", "finish"); callMyMethod(); stopService(new Intent(MyService.this, MainActivity.class)); } }.start();}我從那里開始服務的MainActivity類。stopService(new Intent(getContext(), MyService.class));startService(new Intent(getContext(), MyService.class));顯現<service android:name="MyService" android:enabled="true" android:exported="true"/>注意:我只想按一下按鈕即可致電服務,并在2分鐘后停止服務。請尋求幫助以解決此問題,或者如果除服務之外還有其他好的解決方案。
2 回答

catspeake
TA貢獻1111條經驗 獲得超0個贊
覆蓋onStartCommand 服務并返回START_NOT_STICKY 它不會重新啟動
public void onStartCommand()
{
return START_NOT_STICKY
}
和使用stopSelf()insted的的stopService(new Intent(getContext(), MyService.class));

皈依舞
TA貢獻1851條經驗 獲得超3個贊
應用關閉后,您的服務將無法運行,請閱讀后臺限制。這實際上不是Service
用例。
解決方案可能是您的問題是AlarmManager。將警報設置為精確到2分鐘后,接收器將在觸發時被調用。使用前請AlarmManger
閱讀setExactAndAllowWhileIdle()
和setExact()
。
或者,您也可以使用WorkManager
設置精確作業。但是,如果您不需要,這將是一個過大的殺傷力Job Constraints
。因此,如果您的工作不取決于網絡連接之類的任何約束或其他約束,則可以使用AlarmManger
。
PS:-如果您的任務取決于網絡連接,則應選擇WorkManager
。使用WorkManager閱讀計劃任務。
添加回答
舉報
0/150
提交
取消