私はアプリで簡単な計算を実行しようとしていて、Appが表示/非表示であっても常に実行したいと思っています。いくつかの可能性を調べて、ASyncTaskの使用を終了しました。しかし、私はそれを実行しようとすると、実際にはバックグラウンドで実行されていません。それはまったく正確ではない。 私の質問は:AsyncTaskは本当にこの計算を行うための最良の方法ですか、むしろサービスや何かを使うべきですか?そして、ASyncTaskが正しい方法であれば、何が間違っていますか?ここでアンドロイドアプリのバックグラウンドで計算を正しく実行するにはどうすればよいですか?
は、関連するコードです:
public class MainActivity extends AppCompatActivity implements SensorEventListener{
long startTime = System.nanoTime();
public class resetSpm extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
if((System.nanoTime() - startTime) > 2000000000) {
//some simple calculation
}
return null;
}
}
@Override
public void onStart() {
super.onStart();
new resetSpm().execute();
}
}
私も無い結果とOnCreate関数で実行入れてみました。
if((System.nanoTime() - startTime)> 2000000000){...}は、startTimeを別の時間に設定しているため、タイマーの代わりにそこにあります。 このパートの作業は、何も起こらずに2秒ごとに値をリセットすることです。
ありがとうございます。
編集:サービスを設定しましたが、結果はありません。 これはそのためのコードです:
public class SpmResetService extends Service {
@Override
public void onCreate() {
Log.v("spmService", System.currentTimeMillis() + "spmService has been created.");
}
@Override
public int onStartCommand(Intent intent, int flags, int startedId) {
Log.v("spmService", System.currentTimeMillis() + "spmService has been started.");
if((System.nanoTime() - startTime) > 2000000000) {
//my calculation
}
stopSelf();
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
Log.v("spmService", System.currentTimeMillis() + "spmService has been bound.");
return null;
}
@Override
public void onDestroy() {
Log.v("spmService", System.currentTimeMillis() + "spmService has been destroyed.");
}
}
私は、このようのonCreateでそれを開始しました:私は
<service
android:name="SpmResetService"
>
</service>
しかし、ここでマニフェストをも編集した
Intent spmReset = new Intent(this, SpmResetService.class);
startService(spmReset);
このサービスの名前を解決できないことがわかります。
2件不定期に終了したら計算を繰り返すか?計算の効果は、とにかくUIに影響しますか? – RobVoisey
常に不定期にaoを実行することになっています。 – Lithimlin
現時点ではUIに影響を及ぼしているので、計算を行うかどうかを確認できますが、最後にはAsyncTasksが1回だけ実行され、2秒後にまだ実行されていないため、 – Lithimlin