Android 应用程序正在运行时的GCM调用方法

Android 应用程序正在运行时的GCM调用方法,android,listview,android-activity,google-cloud-messaging,Android,Listview,Android Activity,Google Cloud Messaging,我有一个这样构造的应用程序: boolean run = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("running",false); 活动A:登录活动B:列表视图 我配置了GCM,一切正常。但现在我只想在应用程序未运行时启动活动A,如果应用程序正在运行,我想调用活动B中的方法刷新活动B中的列表视图。如何确定应用程序或活动B是否正在运行 谢谢。好的,您只需使用SharedReference即可 当应用程序在on

我有一个这样构造的应用程序:

boolean run = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("running",false);
活动A:登录活动B:列表视图

我配置了GCM,一切正常。但现在我只想在应用程序未运行时启动活动A,如果应用程序正在运行,我想调用活动B中的方法刷新活动B中的列表视图。如何确定应用程序或活动B是否正在运行


谢谢。

好的,您只需使用SharedReference即可

当应用程序在onCreate方法中运行时,请调用此方法:

PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("running",true).apply();
当你的应用程序被破坏时,在你的onStop或onDestroy方法上

叫这个

PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putBoolean("running",false).apply();
现在,您可以通过以下方式检查应用程序是否正在运行,这意味着运行变量是否为真:

boolean run = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("running",false);
编辑

用于检查SharedPrefs值的服务

public class CheckService extends Service {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    //TODO do something useful
    return Service.START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    //TODO for communication return IBinder implementation
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
boolean run = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("running",false);
 if(run) {
// do what you want if the app is running
//run actualize in your case
 }
else {
//do whatever you want again if it's not
 }
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.i(TAG, "Service destroying");
}

}

广播接收器。。。一个“已创建”/“已在清单中注册”(又名始终已注册)第二个在活动B中创建并注册(并在暂停此活动时注销)…我猜“未运行”一词可以根据OP进行解释,但我打赌他的意思是当应用程序不在前台时。在这种情况下,onDestroy不会立即被调用,而是会在以后调用。所以,若应用程序不在前台意味着不运行,那个么它就不会运行work@tyczj但是他可以使用onStop方法,然后他可以,但是他必须把它放在他的所有活动中,因为当你从一个活动导航到另一个活动时,onStop会被调用,应用程序仍在运行,但如果您仅在一个活动中使用onStop,则不会根据共享首选项运行。不是说你错了,我只是提供了更多的信息,让OP意识到可能存在的问题。这是一个非常好的主意,我认为它是有效的。在活动A中,我为活动A添加了一个布尔真值,在活动B中,我为活动B添加了一个布尔真值,因此我可以查看活动A或B是否正在运行或两者都未运行(在这两个onDestroy中,我都添加了假值,因为当B启动时,A会被销毁。好主意!但是GCM会创建一个带有PendingEvent的通知。我如何根据SharedReferences进行通知操作?类似于OnClickListener…’的编辑,并解释PendingEvent