最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android判斷應(yīng)用程序退到后臺的方法(示例代碼)

 更新時間:2023年03月06日 09:53:21   作者:Spig跟著fly學前端  
判斷手機是否退到后臺,這是我們在Android開發(fā)中實現(xiàn)一些功能時,經(jīng)常會考慮的問題,這篇文章主要介紹了android判斷應(yīng)用程序退到后臺的方法,需要的朋友可以參考下

 判斷手機是否退到后臺,這是我們在Android開發(fā)中實現(xiàn)一些功能時,經(jīng)常會考慮的問題

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

廢話不多說,直接上圖:

如果需要判斷程序進入后臺,然后顯示通知,彈出通知之后,直接進入HOME鍵之前頁面,情點擊下一節(jié)

程序后臺切換前臺,點擊通知進入當前頁面

DEMO下載地址為:點擊下載demo

判斷手機是否退到后臺,本人查閱各種資料,發(fā)現(xiàn)實現(xiàn)其實很簡單,目前自己主要實現(xiàn)方式有兩種:

方式一:

/**
* 程序是否在前臺運行
*
*/
public boolean isAppOnForeground() {
 
ActivityManager activityManager = (ActivityManager) getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = getApplicationContext().getPackageName();
/**
* 獲取Android設(shè)備中所有正在運行的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;
}

這是我在網(wǎng)上找到的例子,

主要的實現(xiàn)原理就是,使用ActivityManager,首先拿到自己App的包名,再拿到Android設(shè)備中所有正在運行的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()方法中,進行判斷,上面代碼中實現(xiàn)的是,App退出后臺就發(fā)送廣播,然后在廣播中執(zhí)行Notification,然后在回到Activity時,在onResume()中清除應(yīng)該清除Notification.

方法二:

這種方法主要是根據(jù)Application中實現(xiàn)ActivityLifecycleCallbacks回調(diào),(可以百度ActivityLifecycleCallbacks)

ActivityLifecycleCallbacks是4.0以后新增的,

主要用于監(jiān)聽Activity的狀態(tài),這里主要關(guān)注onActivityStarted(Activity activity)onActivityStopped(Activity activity)兩個方法,

簡單的解釋:

Activity在start時會走onActivityStarted方法,

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

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,程序在退到后臺,然后執(zhí)行我們需要執(zhí)行的退到后臺處理.

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

APP退到后臺是,發(fā)生廣播,執(zhí)行通知的操作.

ActivityLifecycleCallbacks的實現(xiàn)重寫的方法如下:

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) {
 
}
}

到此這篇關(guān)于android判斷應(yīng)用程序退到后臺的方法的文章就介紹到這了,更多相關(guān)android判斷應(yīng)用程序退到后臺內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android Camera2實現(xiàn)最簡單的預(yù)覽框顯示

    Android Camera2實現(xiàn)最簡單的預(yù)覽框顯示

    這篇文章主要為大家詳細介紹了Android Camera2實現(xiàn)最簡單的預(yù)覽框顯示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android?RecyclerLineChart實現(xiàn)圖表繪制教程

    Android?RecyclerLineChart實現(xiàn)圖表繪制教程

    這篇文章主要為大家介紹了Android?RecyclerLineChart實現(xiàn)圖表繪制教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Android應(yīng)用設(shè)置獨立的多語言實戰(zhàn)技巧詳解

    Android應(yīng)用設(shè)置獨立的多語言實戰(zhàn)技巧詳解

    這篇文章主要為大家介紹了Android應(yīng)用設(shè)置獨立的多語言實戰(zhàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • flutter PageView實現(xiàn)左右滑動切換視圖

    flutter PageView實現(xiàn)左右滑動切換視圖

    這篇文章主要為大家詳細介紹了flutter PageView實現(xiàn)左右滑動切換視圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • iOS開發(fā)中TableView類似QQ分組的折疊與展開效果

    iOS開發(fā)中TableView類似QQ分組的折疊與展開效果

    這篇文章主要介紹了iOS開發(fā)中TableView類似QQ分組的折疊與展開效果,其實要做這個效果我先想到的是在tableView中再嵌套多個tableView。下面通過本文給大家分享實現(xiàn)思路,需要的朋友可以參考下
    2016-12-12
  • Android實現(xiàn)錄音聲波圖

    Android實現(xiàn)錄音聲波圖

    這篇文章主要為大家詳細介紹了Android實現(xiàn)錄音聲波圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android仿京東快報無限輪播效果

    Android仿京東快報無限輪播效果

    這篇文章主要為大家詳細介紹了Android仿京東快報無限輪播效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android ExpandableListView單選以及多選實現(xiàn)代碼

    Android ExpandableListView單選以及多選實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Android ExpandableListView單選以及多選的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android中通過MediaStore獲取音樂文件信息方法

    Android中通過MediaStore獲取音樂文件信息方法

    這篇文章主要介紹了Android中通過MediaStore獲取音樂文件信息方法,本文講解了獲取歌曲的名稱、歌曲的專輯名、歌曲的歌手名、歌曲文件的全路徑、歌曲文件的名稱、歌曲文件的發(fā)行日期等音樂文件信息的方法,需要的朋友可以參考下
    2015-04-04
  • Android端部署DeepSeek的詳細教程

    Android端部署DeepSeek的詳細教程

    DeepSeek最近幾個月很火熱,很多產(chǎn)品以及企業(yè)都在接入DeepSeek,比如微信搜索接入,可以搜索公眾號信息并總結(jié),這個對于查一些資料還挺好用,畢竟手機才是用戶用的最多的,既然談到了手機,那么DeepSeek能否部署于手機之上呢,本文給大家介紹了android端部署的DeepSeek方法
    2025-03-03

最新評論

监利县| 岳池县| 东方市| 贞丰县| 兴宁市| 静海县| 尖扎县| 长兴县| 石景山区| 资阳市| 奈曼旗| 忻城县| 乌鲁木齐市| 全州县| 岚皋县| 土默特右旗| 五常市| 云梦县| 琼海市| 双桥区| 阆中市| 白银市| 昔阳县| 洪泽县| 无棣县| 上林县| 遵义县| 林西县| 淳安县| 靖安县| 浦东新区| 江西省| 海伦市| 常熟市| 攀枝花市| 白朗县| 息烽县| 黑河市| 潼南县| 通辽市| 德兴市|