我怎么知道从服务中可见片段

时间:2015-10-08 02:17:12

标签: android android-fragments google-cloud-messaging android-service

我使用GCM Cloud Listener Service从我的服务器捕获一些通知,并通过NotificationCompat

在状态栏显示

出于某种原因,如果我的片段(带有一些可更新项目的列表)现在显示,我不知道如何显示我的通知。

最好的检查方法是从CloudListenerService开始查看我的片段吗?

我想我可以使用Application来存储片段的当前状态:

在应用程序类中:

 public class ClientApplication extends Application {    
        public static WeakReference<Fragment> currentFragment;

在我的Fragment

@Override
public void onResume() {
    ClientApplication.fragment = new WeakReference<>(this);

    super.onResume();
}

@Override
public void onPause() {
    ClientApplication.fragment = null;
    super.onPause();
}

在我的Cloud listener service

if(ClientApplication.fragment.get() != null && ClientApplication.fragment.get().isVisible()) {
    dosth();

2 个答案:

答案 0 :(得分:5)

片段中的

: 添加这个

public MyFragment extends Fragment {

public  static boolean active = false;
@Override
public void onStart() {
    super.onStart();
    active = true;
}

@Override
public void onStop() {
    super.onStop();
    active = false;
}

在服务中:

if (MyFragment.active) {
       //DO STUFF
}

}

答案 1 :(得分:0)

您可以使用应用的活动或片段生命周期来跟踪您的活动/片段。例如,如果您的活动/片段在SharedPreference中可见或使用类变量,则可以保存。

另一种方法是向ActivityManager询问您的Activity当前是否正在运行,或者询问FragmentManager是否有可见的特定片段:

MyFragmentClass f = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("youFragmentTag");


if (f != null && test.isVisible()) {
     // It's Visible
}
else {
    // No visible
}