
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的信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)