据我所知,没有系统 API 可以让我获取用户空闲时间。当我说用户空闲时间时,我的意思是用户在我的应用程序中的触摸屏上进行了一些交互。因此,我想自己跟踪它。我想到的方法是扩展 Activity
并覆盖 onuserinteraction
方法以保存最后一个用户 Activity 时间。
但挑战在于我的应用有多个进程。我不确定以下方式是否正确且有效。
我想使用带有 MODE_WORLD_WRITEABLE
标志的 SharedPreference
来存储用户上次 Activity 时间。为了避免性能问题,我还在每个 Activity 的 Activity 中缓存了最后一个 Activity 时间。如果差异时间 > 1 秒,我只会将新时间保存到 SharedPrefernces
。
这种方式与使用aidl相比效率高吗?其实aidl也是用file共享变量的吗?如果是的话,我认为这两种方式应该具有相似的性能,对吧?谢谢。
最佳答案
与其每次都从任何地方写下来,不如将其作为您应用程序中的全局函数:
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);
}
}
将应用程序类添加到 list :<application android:name="com.example.MyApp"
在抽象 Activity 类中放置保存功能:
public abstract class TimedActivity extends Activity {
@Override
public void onUserInteraction() {
super.onUserInteraction();
MyApp.saveTimeStamp();
}
public long getElapsed(){
return MyApp.getElapsedTime();
}
}
现在,从这个类中扩展你所有的 Activity ,所有这些 Activity 都将自动保存时间,并且将能够使用getElapsed()
.
关于android - 在 Android 应用程序内跟踪用户空闲时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543842/