1

在启动屏幕旁边的应用程序中,我需要显示一个名为“提示页面”的活动。此活动每天显示一次。当用户在 24 小时内再次打开应用程序时,它不应显示。

首先,我尝试根据当前日期显示,当第一次显示活动时,我将store the current date in shared preference在下次打开应用程序时check显示current date and date in shared preference are equal or not. 如果相等,我将不显示该活动,否则我将显示该活动。

但是这里有一个逻辑错误,如果用户在某个日期的晚上 11 点午夜首先打开应用程序,然后在 t 小时后再次打开应用程序,提示活动将显示,但我需要在 24 小时后显示它,如何能做到吗?请帮我解决这个问题

4

3 回答 3

1

Android 应用程序可以使用 android.os.Handler 和 java.lang.Runnable 类运行周期性计时器。如下所示的简单示例。

要点 1. 扩展android.app.Service 的服务类应该实现onBind、onCreate & onDestroy、生命周期方法。2.periodicTask 是Runnable 实现的一个实例,它运行一个线程。执行 run() 将打印消息“Awake”。3. mHandler是Handler的一个实例,附加在periodicTask线程上。4. 通过 postDelayed 通知 Handler 每分钟执行一次线程。5. 当服务被销毁时,通过调用removeCallbacks 从Handler 中移除periodicTask 实例。

示例代码

public class PeriodicTimerService extends Service {
    private Handler mHandler = new Handler();
    public static final int ONE_DAY = 86400000;
    private Runnable periodicTask = new Runnable() {
        public void run() {
            Log.v("PeriodicTimerService","Awake");
            mHandler.postDelayed(periodicTask, ONE_DAY );
        }
    };

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

    @Override
    public void onCreate() {
        mHandler.postDelayed(periodicTask, ONE_DAY );
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mHandler.removeCallbacks(periodicTask);
        Toast.makeText(this, "Service onDestroy() ", Toast.LENGTH_LONG).show();
    }
}
于 2012-11-09T03:10:18.183 回答
1

我认为您需要这样的流程,请参阅 Jason Hessley's Answer 的实现

 SharedPreferences settings = getSharedPreferences("Preferences",
            MODE_PRIVATE);

    long timeFromPrefs = settings.getLong("time", System.currentTimeMillis());
    final long TIME_DIFF = 24*60*60*1000; 


    if ((System.currentTimeMillis()-timeFromPrefs)>TIME_DIFF) {
        // show Activity...........
        Editor editor = settings.edit();
        editor.putLong("time", System.currentTimeMillis());
        editor.commit();

    } 
于 2012-11-09T04:44:01.760 回答
0

如您在问题中所述,保存上次在共享首选项中开始活动的时间。然后从当前时间减去最后一次。如果超过 24 小时,请出示您的提示。

于 2012-11-09T02:52:36.490 回答