亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何判斷應用程序退到后臺

發布時間:2023-03-06 11:07:10 來源:億速云 閱讀:106 作者:iii 欄目:開發技術

本篇內容主要講解“Android如何判斷應用程序退到后臺”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android如何判斷應用程序退到后臺”吧!

 判斷手機是否退到后臺,這是我們在Android開發中實現一些功能時,經常會考慮的問題

比如:按HOME,BACK鍵時,程序退到后臺,消息以Notification形式彈出 ,或者程序在服務中把App退到后臺,彈出服務浮窗,點擊后回到當前頁面等,這些也是實現及時通訊,服務推送過程經常遇到的,比如QQ,微信消息提醒,網絡電話通知展示等.

廢話不多說,直接上圖:

Android如何判斷應用程序退到后臺

方式一:

/**
* 程序是否在前臺運行
*
*/
public boolean isAppOnForeground() {
 
ActivityManager activityManager = (ActivityManager) getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = getApplicationContext().getPackageName();
/**
* 獲取Android設備中所有正在運行的App
*/
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null)
return false;
 
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
 
return false;
}

這是我在網上找到的例子,

主要的實現原理就是,使用ActivityManager,首先拿到自己App的包名,再拿到Android設備中所有正在運行的App包名,

然后對所有的App進行遍歷,通過判斷正在運行的App中包名有沒有和自己的App相等,從而判斷自己的App是否退到后臺.

@Override
protected void onPause() {
super.onPause();
if(!isAppOnForeground()){
Toast.makeText(getApplicationContext(), TAG+"onPause:",
Toast.LENGTH_SHORT).show();
}else {
sendBroadcast(new Intent(NotificationIntentReceiver.ACTION_ENABLE_MESSAGES)
.setClass(this, NotificationIntentReceiver.class));
Toast.makeText(getApplicationContext(), TAG+"后臺運行1",
Toast.LENGTH_SHORT).show();
}
}

然后在onPause()方法中,進行判斷,上面代碼中實現的是,App退出后臺就發送廣播,然后在廣播中執行Notification,然后在回到Activity時,在onResume()中清除應該清除Notification.

方法二:

這種方法主要是根據Application中實現ActivityLifecycleCallbacks回調,(可以百度ActivityLifecycleCallbacks)

ActivityLifecycleCallbacks是4.0以后新增的,

主要用于監聽Activity的狀態,這里主要關注onActivityStarted(Activity activity)onActivityStopped(Activity activity)兩個方法,

簡單的解釋:

Activity在start時會走onActivityStarted方法,

而Activity在退出后臺時,則會走onActivityStopped方法,所以我們可以通過這種方法實現:

int countActivity = 0;
@Override
public void onActivityStarted(Activity activity) {
countActivity++;
}
@Override
public void onActivityStopped(Activity activity) {
countActivity--;
L.i("onActivityStopped", "countActivity=" + countActivity);
if (countActivity <= 0) {
if (WDRTCSysConfig.getInstance().isCalling()) {
Intent _intent = new Intent(WDBroadcastReceiver.ACTION_ENABLE_MESSAGES);
_intent.setClass(getApplicationContext(), WDBroadcastReceiver.class);
sendBroadcast(_intent);
}
 
}
 
}

上面的代碼主要原理是:我在自定義的Application中定義一個變量,主要是模擬Stack<Activity>判斷等操作,

當我們一個Activity在 Start時countActivity就加一,

當我們一個Activity在 Stop時countActivity就減一,

而最后當我們countActivity值等于0時,就代表App沒有Activity正在Start,程序在退到后臺,然后執行我們需要執行的退到后臺處理.

WDRTCSysConfig.getInstance().isCalling()只是一個布爾值得邏輯判斷,我這里執行的是正在語音服務中.

APP退到后臺是,發生廣播,執行通知的操作.

ActivityLifecycleCallbacks的實現重寫的方法如下:

public class DemoApplication extends Application implements Application.ActivityLifecycleCallbacks{
@Override
public void onCreate() {
super.onCreate();
//全局管理Activity生命周期
registerActivityLifecycleCallbacks(this);
}
 
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
 
}
 
@Override
public void onActivityStarted(Activity activity) {
 
}
 
@Override
public void onActivityResumed(Activity activity) {
 
}
 
@Override
public void onActivityPaused(Activity activity) {
 
}
 
@Override
public void onActivityStopped(Activity activity) {
 
}
 
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
 
}
 
@Override
public void onActivityDestroyed(Activity activity) {
 
}
}

到此,相信大家對“Android如何判斷應用程序退到后臺”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新和县| 乡城县| 宝清县| 辛集市| 长子县| 五家渠市| 苍溪县| 马鞍山市| 平罗县| 巴林右旗| 巫溪县| 依安县| 合江县| 木兰县| 鄢陵县| 桑日县| 邢台县| 临江市| 义乌市| 闽侯县| 福州市| 无为县| 宁德市| 兰西县| 肥乡县| 略阳县| 陆河县| 通河县| 锦州市| 景洪市| 广水市| 灵石县| 津市市| 苏尼特右旗| 饶阳县| 道孚县| 柏乡县| 宝丰县| 昂仁县| 宁城县| 通河县|