カウントダウンタイマーのサービスを作っています。アクティビティでは、毎秒ショータイム用のテキストビューを表示します:100 - 0です。私はタイマーが非常に速く走るのを見ます、しかし、私はこれをちょうど毎秒実行したいです。問題はどこですか?アクティビティに戻るとカウントダウンタイマーの実行が速くなる
MainActivity:
public static final String mBroadcastIntegerAction = "com.example.broadcast.integer";
private IntentFilter mIntentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showTime = (TextView) findViewById(R.id.textView1);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(mBroadcastIntegerAction);
Intent serviceIntent = new Intent(this, AppServiceDay.class);
startService(serviceIntent);
}
@Override
public void onResume() {
super.onResume();
registerReceiver(mReceiver, mIntentFilter);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(mBroadcastIntegerAction)) {
int second = intent.getIntExtra("Time", 0);
showTime.setText("" + second);
}
}
};
@Override
protected void onPause() {
registerReceiver(mReceiver, mIntentFilter);
// unregisterReceiver(mReceiver);
super.onPause();
}
サービス:
public class AppServiceDay extends Service {
CountDownTimer cdt;
public static Handler mHandler;
int downer = 1000;
int time = 100;
int mainTime = 100000;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
cdt = new CountDownTimer(mainTime, downer) {
@Override
public void onTick(long millisUntilFinished) {
time -= 1;
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(MainActivity.mBroadcastIntegerAction);
broadcastIntent.putExtra("Time", time);
sendBroadcast(broadcastIntent);
}
@Override
public void onFinish() {
time = 100;
this.start();
}
};
cdt.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
サービスでフィールド 'static int c = 0'を追加します。その後、 'onStartCommand'の中に' Log.d( "c"、 "" +(++ c));あなたは何が起こっているのかを把握する必要があります。 – Selvin
1.カウントダウン専用のサービスを実行していますか? 1.フォアグラウンドでアプリケーションを実行していますか? 1がyes、2がnoの場合、HandlerとSharedPreferenceだけでこれを行うことができます。 –
@Muthukrishnan Rajendran、サービスでハンドラを使用するとき、私はこのporoblemを与えます。もし私が活動タイマーに戻ってきたら、非常に速く働いてください。 – Fazel