使用Activity类对象创建Activity的实例

时间:2015-08-10 13:30:40

标签: android android-intent android-activity

我有一个Activity类:

Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());

String activityClassName = launchIntent.getComponent().getClassName();

Class<?> activityClazz = Class.forName(activityClassName);

是否可以使用activityClazz创建此活动的实例?如果是这样,怎么样?

(我的代码在一个独立的java类中。不在活动或服务中。)

3 个答案:

答案 0 :(得分:4)

从技术上讲,您可以像这样创建Activity的实例。但是,这个实例没用,因为它的底层Context不会被设置。

规则是您永远不应该自己创建Android组件的实例(ActivityServiceBroadcastReceiverProvider)(使用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();