天天看点

Android 获取有TabActivity继承关系的子类名的方法 及 获取Activity类名的方法

Android中的任务等等都是通过栈来管理的,Activities的管理也不例外。它的先进后出特性让Android可以很容易实现从当前Activity回到或者重新启动先前的Activity。

(注:当系统资源匮乏的时候,系统会释放先前Activity占用资源,因此当从当前Activity返回先前的Activity的时候,先前的Activity会被重新创建)

、简单的说,回到先前的Activity本质就是删除当前的Activity,让先前的Activity变成Activities栈的栈顶。可以这么说,当前运行的活动的Activity就是Activities栈顶的那个Activity。

第一种方法获取的是父类的Activity名称;第二种获取的是当前的Activity名称,非父类。

第一种方法:

1、所需步骤:

    1.得到当前运行环境(context)的Activity管理器;

    2.通过Activity管理器得到当前的任务栈信息;

    3.从任务栈中获得栈顶的Activity的名称。

1、首先需要加一个权限: 

<uses-permission android:name="android.permission.GET_TASKS"/>
           

2、Java代码如下:

ActivityManager manager = (ActivityManager)   getSystemService(Context.ACTIVITY_SERVICE);    
List<RunningTaskInfo> runningTasks = manager .getRunningTasks(1);    
RunningTaskInfo cinfo = runningTasks.get(0);    
ComponentName component = cinfo.topActivity;    
Log.e("current activity is ", component.getClassName());
           

3、其它说明:

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
RunningTaskInfo info = manager.getRunningTasks(1).get(0); 
String shortClassName = info.topActivity.getShortClassName(); //类名 
String className = info.topActivity.getClassName(); //完整类名 
String packageName = info.topActivity.getPackageName(); //包名
           

第二种方法:

String contextString = context.toString();
//return contextString.substring(contextString.lastIndexOf(".")+1, contextString.indexOf("@"));
return contextString.substring(0, contextString.indexOf("@"));