2014-04-01 120 views
0

Android是否具有应用程序状态,如后台或前台(前台)?基本上,每当我的应用程序转到后台(主页按钮被按下),如果我然后重新打开它(使它前景)我想做一个asyc电话给我的网络服务器,就像p​​ing我的网络服务器。它不应该在哪些活动im进来。拦截Android应用程序状态背景前景

我不能用活动生命周期方法做它,因为它们只能用于活动。我想要在整个应用程序级别上工作/行动的东西。谢谢

回答

1

我不确定你的问题,但我认为你可以有一个BaseActivity并从那个派生,然后onResume()将永远被称为是正确的?

+0

我已经tryed这一点,但随后的异步调用被激活,每次我打开一个新的活动,这是不应该的!当我的应用程序从后台进入前台时,我应该只进行异步调用。 – Pheonix7

+0

你有其他想法吗? – Pheonix7

+0

我发现了一个解决方法,它需要一些工作:http://stackoverflow.com/a/15526384/857583我不认为你可以区分'前来'任何其他方式。 – Dante

0

简单的回答是不,android不提供这样的状态

了大量的研究后,我发现了一个可靠的和简单的解决方案:

public class ApplicationLifecycleHandler implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 { 

    private static final String TAG = ApplicationLifecycleHandler.class.getSimpleName(); 
    private static boolean isInBackground = false; 

    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Adjust.onResume(); 
     if(isInBackground){ 
      Log.d(TAG, "app went to foreground"); 
      isInBackground = false; 
     } 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Adjust.onPause(); 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
    } 

    @Override 
    public void onConfigurationChanged(Configuration configuration) { 
    } 

    @Override 
    public void onLowMemory() { 
    } 

    @Override 
    public void onTrimMemory(int i) { 
     if(i == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN){ 
      Log.d(TAG, "app went to background"); 
      isInBackground = true; 
     } 
    } 
} 
0

我写在这里简单的答案找到,如果应用程序是在前台或后台。没有得到任务,也没有这样的检查。但结果是非常明确的,并根据需要。

public class MainApplication extends Application implements Application.ActivityLifecycleCallbacks { 
private static boolean background = false; 
private static int count = 0; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    registerActivityLifecycleCallbacks(this); 
} 

@Override 
public void onActivityCreated(Activity activity, Bundle bundle) { 

} 

@Override 
public void onActivityStarted(Activity activity) { 
    if(background){ 
     background = false; 
     Log.v("activityFocus", "Activity came in foreground "); 
     Toast.makeText(getApplicationContext(), "Foreground", Toast.LENGTH_SHORT).show(); 
    } 
} 

@Override 
public void onActivityResumed(Activity activity) { 
    count++; 
} 

@Override 
public void onActivityPaused(Activity activity) { 
    count--; 

} 

@Override 
public void onActivityStopped(Activity activity) { 
if(count==0){ 
    Log.v("activityFocus", "Activity is in background "); 
    Toast.makeText(getApplicationContext(), "Background", Toast.LENGTH_SHORT).show(); 
    background=true; 
} 
} 

@Override 
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 

} 

@Override 
public void onActivityDestroyed(Activity activity) { 

} 

}