如何得到当前正在运行的activity是哪个

如何得到当前正在运行的activity是哪个,第1张

Activity是一个用户交互的界面,一般我们很少用new的方式来获取一个activity的实例,因为没有什么意义。而且也改不了别人的代码。如果你有源码可以看下ActivityManagerServicejava这个类,用来管理Activity的。希望对你有帮助

当前的Activity只会有一个的

首先要知道Activity的四种状态

Active/Runing

一个新

Activity

启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

Paused

Activity

被另一个透明或者

Dialog

样式的

Activity

覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。

Stoped

Activity

被另外一个

Activity

覆盖、失去焦点并不可见时处于

Stoped

状态。

Killed

Activity

被系统杀死回收或者没有被启动时处于

Killed

状态。

protected

void

onStart()

方法

onCreate()

方法之后被调用,或者在

Activity

Stop

状态转换为

Active

状态时被调用,一般执行了onStart()后就执行onResume()。

protected

void

onResume()

Activity

Pause

状态转换到

Active

状态时被调用。

当一个应用程序的Activity很多的时候,为了更好的用户体验效果,就需要对Activity的显示顺序做一些人为控制,而不要使用Android自身的Activity的历史记录堆栈机制,此时常常需要知道上一个Activity是哪一个。具体做法思路就是通过Intent启动一个Activity时,把当前的Activity信息传递到下一个Activity中,当下一个Activity启动时,通过Intent获取传入的参数即可知道上一个Activity的信息。

需要在跳转的Intent对象中添加一个参数:

intentputExtra("comeFrom", activityName);

跳转到目标activity时带上当前activity的名字,这样才知道是从哪里跳转进来的。

设置激活flag isShow。布尔类型。

在onResume里设置成ture。

在onPause里设置成false。

不知道activity自身有没有提供方法,不过用这种设置flag的方法应该可以解决

activity中有个变量mResumed

有个方法叫isResumed应该符合你的要求把。

获取当前Activity的ViewGroup代码:

Context context = viewgetContext();

if (context instanceof Activity)

{

    Activity activity = (Activity)context;

}

给每个Activity都添加对应的代码:

@Override

protected void onResume() {

superonResume();

AppContextgetInstance()setCurrentActivity(this);

}

@Override

protected void onPause() {

AppContextgetInstance()setCurrentActivity(null);

superonPause();

}

@Override

public void onDestroy() {

AppContextgetInstance()setCurrentActivity(null);

superonDestroy();

}

然后在自己的app中:

import androidappActivity;

import androidappApplication;

public class AppContext extends Application{

private Application parentApp;

private Activity curActivity;

public Application getAppContext() {

return parentApp;

}

private static class LazyHolder {

static AppContext instance = new AppContext();

}

public static AppContext getInstance() {

return LazyHolderinstance;

}

@Override

public boolean Start(Map<String, Object> args) {

Object param = argsget(appContext);

if (param instanceof Application) {

parentApp = (Application)param;

return true;

}

return false;

}

@Override

public void Stop(Map<String, Object> args) {

}

public void setCurrentActivity(Activity curActivity){

thiscurActivity = curActivity;

}

public Activity getCurrentActivity(){

return thiscurActivity;

}

public boolean isInAdapterActivity(){

boolean isInAdapterActivity = false;

if(null != curActivity){

if(curActivity instanceof AdapterActivity){

isInAdapterActivity = true;

}

}

return isInAdapterActivity;

}

public boolean isInScanActivity(){

boolean isInScanActivity = false;

if(null != curActivity){

if(curActivity instanceof ScanActivity){

isInScanActivity = true;

}

}

return isInScanActivity;

}

public boolean isInMainActivity(){

boolean isInMainActivity = false;

if(null != curActivity){

if(curActivity instanceof MainActivity){

isInMainActivity = true;

}

}

return isInMainActivity;

}

}

然后在对应各个Activity:

if(AppContextgetInstance()isInMainActivity()){

//do sth

}

以上就是关于如何得到当前正在运行的activity是哪个全部的内容,包括:如何得到当前正在运行的activity是哪个、android 如何判断当前是哪个activity、在Activity中如何获知上一个Activity的信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9495721.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存