国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

2種判斷(獲取)棧頂activity的方法

2019-11-08 00:21:19
字體:
來源:轉載
供稿:網友

有時候,需要獲取當前位于棧頂的activity的實例。這里介紹2種方法,以及各自適用的場景。最后有demo測試數據以供參考

第一種方法:獲取棧頂activity的實例 應用場景:項目中,activity都繼承于一個BaseActivity,在這個base中,有個廣播接收器,收到廣播,就彈出一個dialog?,F打開多個activity,這個時候,通過三方推送等方法,發出一個廣播,base接收到。因為只需要在棧頂的activity彈出,而不是每個activity都彈出,所以,需要獲取棧頂activity的實例(即上下文,傳給dialog的構造方法),而不能簡單的傳個this,否則,會導致每個activity都有dialog彈出。

獲取方法:application中:

public class MyApplication extends Application { PRivate static MyApplication mInstance; private Activity app_activity = null; @Override public void onCreate() { super.onCreate(); mInstance = this; initGlobeActivity(); } private void initGlobeActivity() { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { app_activity = activity; Log.e("onActivityCreated===", app_activity + ""); } @Override public void onActivityDestroyed(Activity activity) { app_activity = activity; Log.e("onActivityDestroyed===", app_activity + ""); } /** Unused implementation **/ @Override public void onActivityStarted(Activity activity) { app_activity = activity; Log.e("onActivityStarted===", app_activity + ""); } @Override public void onActivityResumed(Activity activity) { app_activity = activity; Log.e("onActivityResumed===", app_activity + ""); } @Override public void onActivityPaused(Activity activity) { app_activity = activity; Log.e("onActivityPaused===", app_activity + ""); } @Override public void onActivityStopped(Activity activity) { app_activity = activity; Log.e("onActivityStopped===", app_activity + ""); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } }); } /** * 獲取實例 * @return */ public static MyApplication getInstance() { return mInstance; } /** * 公開方法,外部可通過 MyApplication.getInstance().getCurrentActivity() 獲取到當前最上層的activity */ public Activity getCurrentActivity() { return app_activity; }}

注意:initGlobeActivity()、getInstance()、getCurrentActivity() 這3個方法

使用方法: 在base的展示dialog方法中:

Activity currentActivity = MyApplication.getInstance().getCurrentActivity();Dialog dialog = new Dialog(currentActivity, R.style.PushDialog);

————————————————————————————————–

第二種方法:獲取棧頂activity的完整包名 應用場景:僅僅為了判斷當前activity是不是在棧頂,以便決定要不要彈toast等等。 注意:獲取到的僅僅是完整包名,判斷當前activity在不在棧頂,需要用到String方法中的contains方法等。這個時候需要注意,以免出錯。如:棧頂activity名為AB,里面包含A,就認為A是在棧頂,就出錯了。最好這個activity的名字很特殊,和其他的沒有重合部分

在工具類中創建方法:

/** * 獲得棧中最頂層的Activity * * @param context * @return */ public static String getTopActivity(Context context) { android.app.ActivityManager manager = (android.app.ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1); if (runningTaskInfos != null) { return (runningTaskInfos.get(0).topActivity).toString(); } else return null; }

使用:

String topActivity_1 = Util.getTopActivity(this);Log.e("topActivity_1", topActivity_1);

測試數據: 現有3個activity:MainActivity_1、MainActivity_2、MainActivity_3 第一個中有按鈕,點擊跳轉到第二個,第二個中有按鈕,點擊跳轉到第三個 代碼:

package com.chen.demo;import android.app.Activity;import android.os.Bundle;import android.view.Window;/** * 基礎Activity */public abstract class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不顯示title requestWindowFeature(Window.FEATURE_NO_TITLE); initview(); } abstract void initview();}package com.chen.demo;import android.content.Intent;import android.util.Log;import android.view.View;import android.widget.TextView;public class MainActivity_1 extends BaseActivity { TextView tv; @Override void initview() { setContentView(R.layout.activity_main_1); String topActivity_1 = Util.getTopActivity(this); Log.e("topActivity_1", topActivity_1); tv = (TextView) findViewById(R.id.tv); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity_1.this.startActivity(new Intent(MainActivity_1.this, MainActivity_2.class)); } }); }}import android.content.Intent;import android.util.Log;import android.view.View;import android.widget.TextView;public class MainActivity_2 extends BaseActivity { TextView tv_2; @Override void initview() { setContentView(R.layout.activity_main_2); String topActivity_2 = Util.getTopActivity(this); Log.e("topActivity_2", topActivity_2); tv_2 = (TextView) findViewById(R.id.tv_2); tv_2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity_2.this.startActivity(new Intent(MainActivity_2.this, MainActivity_3.class)); } }); }}package com.chen.demo;import android.util.Log;public class MainActivity_3 extends BaseActivity { @Override void initview() { setContentView(R.layout.activity_main_3); String topActivity_3 = Util.getTopActivity(this); Log.e("topActivity_3", topActivity_3); }}

日志:

程序剛啟動02-24 10:56:12.997 13043-13043/com.chen.demo E/onActivityCreated===: com.chen.demo.MainActivity_1@eff3d7802-24 10:56:13.030 13043-13043/com.chen.demo E/topActivity_1: ComponentInfo{com.chen.demo/com.chen.demo.MainActivity_1}02-24 10:56:13.032 13043-13043/com.chen.demo E/onActivityStarted===: com.chen.demo.MainActivity_1@eff3d7802-24 10:56:13.032 13043-13043/com.chen.demo E/onActivityResumed===: com.chen.demo.MainActivity_1@eff3d78點擊MainActivity_1中按鈕去往MainActivity_202-24 10:56:47.692 13043-13043/com.chen.demo E/onActivityPaused===: com.chen.demo.MainActivity_1@eff3d7802-24 10:56:47.718 13043-13043/com.chen.demo E/onActivityCreated===: com.chen.demo.MainActivity_2@53c82a702-24 10:56:47.722 13043-13043/com.chen.demo E/topActivity_2: ComponentInfo{com.chen.demo/com.chen.demo.MainActivity_2}02-24 10:56:47.724 13043-13043/com.chen.demo E/onActivityStarted===: com.chen.demo.MainActivity_2@53c82a702-24 10:56:47.724 13043-13043/com.chen.demo E/onActivityResumed===: com.chen.demo.MainActivity_2@53c82a702-24 10:56:48.099 13043-13043/com.chen.demo E/onActivityStopped===: com.chen.demo.MainActivity_1@eff3d78點擊MainActivity_2中按鈕去往MainActivity_302-24 10:57:21.984 13043-13043/com.chen.demo E/onActivityPaused===: com.chen.demo.MainActivity_2@53c82a702-24 10:57:21.999 13043-13043/com.chen.demo E/onActivityCreated===: com.chen.demo.MainActivity_3@f2b18ec02-24 10:57:22.003 13043-13043/com.chen.demo E/topActivity_3: ComponentInfo{com.chen.demo/com.chen.demo.MainActivity_3}02-24 10:57:22.003 13043-13043/com.chen.demo E/onActivityStarted===: com.chen.demo.MainActivity_3@f2b18ec02-24 10:57:22.003 13043-13043/com.chen.demo E/onActivityResumed===: com.chen.demo.MainActivity_3@f2b18ec02-24 10:57:22.382 13043-13043/com.chen.demo E/onActivityStopped===: com.chen.demo.MainActivity_2@53c82a7
上一篇:絕對地址賦值

下一篇:JNI學習筆記

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武乡县| 闵行区| 新安县| 皋兰县| 当雄县| 开化县| 普宁市| 大厂| 汉源县| 乌鲁木齐市| 富平县| 合山市| 聂荣县| 海原县| 龙州县| 根河市| 新竹市| 合作市| 上思县| 阜南县| 墨江| 平江县| 三都| 两当县| 汶上县| 信阳市| 化德县| 西昌市| 连州市| 定襄县| 石城县| 天峨县| 福清市| 康定县| 分宜县| 饶平县| 江永县| 城固县| 沁源县| 旅游| 静宁县|