我是安卓新手。我有一个基于客户端服务器的应用程序。每隔一分钟,服务器都会向客户端发送更新通知,而在客户端方面,我的应用程序接收这些更新并使用Toast显示它们。但现在我的问题是,每当我的客户端应用程序进入后台时,服务器都会继续发送更新通知,并且我的客户端将其显示为应用程序在前台运行一样。我不知道如何检查应用程序是否在后台运行。
我是安卓新手。我有一个基于客户端服务器的应用程序。每隔一分钟,服务器都会向客户端发送更新通知,而在客户端方面,我的应用程序接收这些更新并使用Toast显示它们。但现在我的问题是,每当我的客户端应用程序进入后台时,服务器都会继续发送更新通知,并且我的客户端将其显示为应用程序在前台运行一样。我不知道如何检查应用程序是否在后台运行。
更新,请先查看:
要检查您的应用程序是否被发送到后台,您可以在应用程序中的每个活动的onPause()
上调用以下代码:
/**
* Checks if the application is being sent in the background (i.e behind
* another application's Activity).
*
* @param context the context
* @return <code>true</code> if another application will be above this one.
*/
public static boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
为使此方法生效,您应将以下代码包含在AndroidManifest.xml
文件中
<uses-permission android:name="android.permission.GET_TASKS" />
http://developer.android.com/guide/topics/fundamentals.html#lcycles 是关于Android应用程序的生命周期的描述。
当活动进入后台时,onPause() 方法将被调用。因此,您可以在此方法中停用更新通知。
仅限API 14及以上版本
您可以使用ComponentCallbacks2来处理activity
、service
等。
例如:
public class MainActivity extends AppCompatActivity implements ComponentCallbacks2 {
@Override
public void onConfigurationChanged(final Configuration newConfig) {
}
@Override
public void onLowMemory() {
}
@Override
public void onTrimMemory(final int level) {
if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
// app is in background
}
}
}
getRunningTasks(int maxNum)
]已在API级别21(LOLLIPOP)中被弃用,出于安全原因,可能会泄露个人信息给第三方应用程序。(如果您使用此方法,请注意它将不受未来Android版本的支持)。 - Fernando Leal!topActivity.getPackageName().equals(context.getPackageName())
- Ruchir Baronia