0

管理者がブラウザにメッセージをプッシュしたときに、アプリケーションユーザーにメッセージを表示する必要があります。そのために、アプリケーションの起動時にユーザーにメッセージを表示するようにタイマーを実装しました。新しいメッセージがプッシュされた場合、タイマーは20分に1回メッセージとして取得するために実行を続けます。私のタイマーは正常に動作していますが、ボタンをクリックすると。

  1. アクティビティが読み込まれるとすぐにタイマーを開始したい。
  2. これはメッセージを表示する適切な方法ですか?(バナーのようなものです)
  3. タイマーはどのくらいリソースを消費しますか?

タイマータスク

class secondTask extends TimerTask {

    @Override
    public void run() {

        TestBannerActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() { 
                fl.setVisibility(View.VISIBLE);
                long millis = System.currentTimeMillis() - starttime;
                int seconds = (int) (millis / 1000);
                int minutes = seconds / 60;
                seconds = seconds % 60;


                 text2.setText(String.format("%d:%02d", minutes,
                 seconds));
            }
        });
    }
};

ボタンクリックイベント

b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Button b = (Button) v;
            if (b.getText().equals("stop")) {
                timer.cancel();
                timer.purge(); 
                b.setText("start");
            } else {
                starttime = System.currentTimeMillis();
                timer = new Timer(); 
                timer.schedule(new secondTask(), 8000, 1200000); 
                b.setText("stop");
            }
        }
    });
4

1 に答える 1

0

このコードを使用できます:

package packagename.timerService;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.IBinder;

public class TimerService extends Service{

    public static final String BROADCAST_TIMER_ACTION = "packagename.timerService.TimerService";
    private final Handler handler = new Handler();
    private final Handler updateUIHandler = new Handler();


    Intent intent;
    int time = 0;
    private int durationTime = 0;

    private int starDate;
    private int currentDate;
    private Date startTaskDate;
    private String taskComment;


    @Override
    public void onCreate() {
        // Called on service created
        intent = new Intent(BROADCAST_TIMER_ACTION);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        try {


                handler.removeCallbacks(sendUpdatesToUI);
                handler.post(sendUpdatesToUI); //post(sendUpdatesToUI);
                starDate = Calendar.getInstance().get(Calendar.DATE);
                durationTime = 0;
                startTaskDate = new Date();


            }
        } catch (Exception e) {}
        return START_STICKY;
    }

    private Runnable sendUpdatesToUI = new Runnable() {
        public void run() {
            try{
                displayLoggingInfo();
                time ++;
                durationTime ++;
                handler.postDelayed(this, 60 * 1000); // 1 minute
            }catch (Exception e) { }
        }
    };

    private Runnable sendUpdatesToUIOnResume = new Runnable() {
        public void run() {
            displayLoggingInfoForOnResume();
        }
    };

    private void displayLoggingInfoForOnResume() {
        try{
            currentDate = Calendar.getInstance().get(Calendar.DATE);

            intent.putExtra("changeDate", String.valueOf(false));

            intent.putExtra("time", String.valueOf(time == 0 ? time : time - 1 ));
            sendBroadcast(intent);
        } catch (Exception e) { }
    }

    private void displayLoggingInfo() {
        try{
            currentDate = Calendar.getInstance().get(Calendar.DATE);

            intent.putExtra("changeDate", String.valueOf(false));

            intent.putExtra("durationTime", String.valueOf(durationTime));
            intent.putExtra("time", String.valueOf(time));

            sendBroadcast(intent);
        }catch (Exception e) {
            // TODO: handle exception
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        try {
            handler.removeCallbacks(sendUpdatesToUI);
            updateUIHandler.removeCallbacks(sendUpdatesToUIOnResume);
            durationTime = 0;
            time = 0;

            super.onDestroy();
        } catch (Exception e) { }

    }

    @Override
    public boolean stopService(Intent name) {
        handler.removeCallbacks(sendUpdatesToUI);
        updateUIHandler.removeCallbacks(sendUpdatesToUIOnResume);
        durationTime = 0;
        time = 0;

        return super.stopService(name);
    }


}
于 2012-10-12T16:52:54.540 に答える