Android是否具有应用程序状态,如后台或前台(前台)?基本上,每当我的应用程序转到后台(主页按钮被按下),如果我然后重新打开它(使它前景)我想做一个asyc电话给我的网络服务器,就像ping我的网络服务器。它不应该在哪些活动im进来。拦截Android应用程序状态背景前景
我不能用活动生命周期方法做它,因为它们只能用于活动。我想要在整个应用程序级别上工作/行动的东西。谢谢
Android是否具有应用程序状态,如后台或前台(前台)?基本上,每当我的应用程序转到后台(主页按钮被按下),如果我然后重新打开它(使它前景)我想做一个asyc电话给我的网络服务器,就像ping我的网络服务器。它不应该在哪些活动im进来。拦截Android应用程序状态背景前景
我不能用活动生命周期方法做它,因为它们只能用于活动。我想要在整个应用程序级别上工作/行动的东西。谢谢
我不确定你的问题,但我认为你可以有一个BaseActivity并从那个派生,然后onResume()将永远被称为是正确的?
简单的回答是不,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;
}
}
}
我写在这里简单的答案找到,如果应用程序是在前台或后台。没有得到任务,也没有这样的检查。但结果是非常明确的,并根据需要。
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) {
}
}
我已经tryed这一点,但随后的异步调用被激活,每次我打开一个新的活动,这是不应该的!当我的应用程序从后台进入前台时,我应该只进行异步调用。 – Pheonix7
你有其他想法吗? – Pheonix7
我发现了一个解决方法,它需要一些工作:http://stackoverflow.com/a/15526384/857583我不认为你可以区分'前来'任何其他方式。 – Dante