我有一个Activity类:
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
String activityClassName = launchIntent.getComponent().getClassName();
Class<?> activityClazz = Class.forName(activityClassName);
是否可以使用activityClazz
创建此活动的实例?如果是这样,怎么样?
(我的代码在一个独立的java类中。不在活动或服务中。)
答案 0 :(得分:4)
从技术上讲,您可以像这样创建Activity
的实例。但是,这个实例没用,因为它的底层Context
不会被设置。
规则是您永远不应该自己创建Android组件的实例(Activity
,Service
,BroadcastReceiver
,Provider
)(使用new
关键字或其他方式)。这些类只应由Android框架创建,因为Android为这些对象设置了基础Context
,并且还管理生命周期。
简而言之,如果您需要像这样创建Activity
的实例,那么您的架构存在缺陷。
答案 1 :(得分:1)
Class.forName()需要完全限定名称 - 即包含该类的包的名称,以及类本身的简单名称。
假设包含该类的包名为com.your.package,则代码必须为
String className = "com.your.package.Tab3"; // Change here
Object obj= null;
try {
obj= Class.forName(className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
是肯定的。您可以使用以下代码行获取活动上下文
Activity activity = (Activity) getContext();