在Android中跟踪应用程序内的用户空闲时间

在Android中跟踪应用程序内的用户空闲时间,android,sharedpreferences,aidl,Android,Sharedpreferences,Aidl,据我所知,没有系统API可供我获取用户空闲时间。当我说用户空闲时间时,我的意思是用户在我的应用程序中的触摸屏上有一些交互。因此,我想自己跟踪它。我想到的方法是扩展Activity并重写onuserinteraction方法,以节省上次用户的活动时间 但挑战在于我的应用程序有多个进程。我不确定以下方法是否正确有效 我想使用sharedReference和MODE\u WORLD\u WRITEABLE标志来存储用户上次活动的时间。为了避免性能问题,我还在每个活动中缓存活动中的最后一次活动时间。如果

据我所知,没有系统API可供我获取用户空闲时间。当我说用户空闲时间时,我的意思是用户在我的应用程序中的触摸屏上有一些交互。因此,我想自己跟踪它。我想到的方法是扩展
Activity
并重写
onuserinteraction
方法,以节省上次用户的活动时间

但挑战在于我的应用程序有多个进程。我不确定以下方法是否正确有效

我想使用
sharedReference
MODE\u WORLD\u WRITEABLE
标志来存储用户上次活动的时间。为了避免性能问题,我还在每个活动中缓存活动中的最后一次活动时间。如果差异时间>1秒,我只将新时间保存到
SharedPrefernces


与使用aidl相比,这种方法有效吗?实际上,aidl是否也使用文件共享变量?如果是的话,我认为这两种方法应该有相似的性能,对吗?谢谢。

相反,每次从任何地方写下它,让它成为你应用程序中的一个全局功能:

public class MyApp extends Application {
    private static SharedPreferences sPreference;

    private static final long MIN_SAVE_TIME = 1000;
    private static final String PREF_KEY_LAST_ACTIVE = "last_active";
    private static final String PREF_ID_TIME_TRACK = "time_track";

    public static void saveTimeStamp(){
        if(getElapsedTime() > MIN_SAVE_TIME){
            sPreference.edit().putLong(PREF_KEY_LAST_ACTIVE, timeNow()).commit();
        }
    }

    public static long getElapsedTime(){
        return timeNow() - sPreference.getLong(PREF_KEY_LAST_ACTIVE,0);
    }

    private static long timeNow(){
        return Calendar.getInstance().getTimeInMillis();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sPreference = getSharedPreferences(PREF_ID_TIME_TRACK,MODE_PRIVATE);
    }
}

将应用程序类添加到清单:
而不是每次从任何地方将其写下来,使其成为应用程序中的全局函数:

public class MyApp extends Application {
    private static SharedPreferences sPreference;

    private static final long MIN_SAVE_TIME = 1000;
    private static final String PREF_KEY_LAST_ACTIVE = "last_active";
    private static final String PREF_ID_TIME_TRACK = "time_track";

    public static void saveTimeStamp(){
        if(getElapsedTime() > MIN_SAVE_TIME){
            sPreference.edit().putLong(PREF_KEY_LAST_ACTIVE, timeNow()).commit();
        }
    }

    public static long getElapsedTime(){
        return timeNow() - sPreference.getLong(PREF_KEY_LAST_ACTIVE,0);
    }

    private static long timeNow(){
        return Calendar.getInstance().getTimeInMillis();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sPreference = getSharedPreferences(PREF_ID_TIME_TRACK,MODE_PRIVATE);
    }
}

将应用程序类添加到清单:
您是否尝试过countdowntimer?您是否尝试过countdowntimer?Thx以获取建议,但您是否可以对性能提出更多意见?顺便问一下,我想是否有任何理由将这些函数放在应用程序中而不是放在活动基类中?你想让他们共享SharedReference吗?@请记住,
SharedPerference
是应用程序数据目录中的一个文件,它被多次读取/写入,就像日志文件一样。因为内容只不过是一个64位的数字,所以它的速度和任何东西一样快。应用程序类是全局的,其方法是静态的,您可以从应用程序中的任何位置调用它们,而不仅仅是从活动中调用。谢谢您的建议,但您能否对性能提出更多意见?顺便问一下,我想有没有理由将这些函数放在应用程序中而不是放在活动基类中?你想让他们共享SharedReference吗?@请记住,
SharedPerference
是应用程序数据目录中的一个文件,它被多次读取/写入,就像日志文件一样。因为内容只不过是一个64位的数字,所以它的速度和任何东西一样快。应用程序类是全局的,其方法是静态的,您可以从应用程序中的任何位置调用它们,而不仅仅是从活动中调用。