1

我有一个应用程序定期检查服务器是否有一些标志。然后根据此标志的值显示一条消息。

我不想显示一条消息,那么应用程序不在前面。我使用 SharedPreferences 手动存储应用程序状态。在每项活动中,我都会执行以下操作:

@Override
protected void onStart() {
    super.onStart();
    SharedPreferences.Editor prefs = context.getSharedPreferences("myprefs", getApplicationContext().MODE_PRIVATE).edit();
    prefs.putBoolean("appInFront", true);
    prefs.commit();
}
@Override
protected void onPause() {
    super.onPause();
    SharedPreferences.Editor prefs = context.getSharedPreferences("myprefs", getApplicationContext().MODE_PRIVATE).edit();
    prefs.putBoolean("appInFront", false);
    prefs.commit();
}

这使我可以从“appInFront”首选项中获取应用程序的状态:

SharedPreferences prefs = context.getSharedPreferences("myprefs", Context.MODE_PRIVATE);
boolean appInFront = prefs.getBoolean("appInFront", true);      

但是可能存在获取应用程序当前状态的本机方法或方式(应用程序是在前面还是在后台)?

4

1 回答 1

3

您正在显示什么样的消息?您的活动中的通知或其他内容?在您的应用程序中,您需要该状态信息吗?

您可以编写 BaseActivity 并从中扩展所有其他活动。所以你需要编写更少的代码。作为 onPause() 的对应物,您应该使用 onResume():

public class BaseActivity{

public static boolean appInFront;

@Override
protected void onResume() {
    super.onResume();
    appInFront = true;
}
@Override
protected void onPause() {
    super.onPause();
    appInFront = false;
}

}

使用该静态公共布尔值,您可以从“任何地方”询问您的应用程序的可见性状态。您可能不需要记住应用程序重新启动之间的状态,因此布尔值就足够了。

if(BaseActivity.appInFront){
    //show message
}
于 2011-07-01T18:55:23.200 回答