Android Load活动进入Class <! - ? - >对象

时间:2014-01-08 20:33:12

标签: java android instrumentation

所以在我进入之前,我想描述一下我的设置。这就是我所拥有的:

  1. 一个名为MainActivity.java的文件,它是一个简单的Activity类,具有onCreate()方法和执行Toast消息的btnClick()方法。就是这样,没什么复杂的。此MainActivity.java的包名称为com.testapp。

  2. 一个名为LoadInst.java的文件,它是一个Instrumentation类,它尝试将MainActivity.java加载到Class对象中。这个包的名称是com.inst。

  3. 所以我想要做的是在LoadInst.java类中,我将MainActivity.java类加载到Class对象中,然后创建一个方法对象来表示onCreate()方法以便调用onCreate()方法。问题是我在MainActivity.java onCreate()方法尝试执行行super.onCreate(savedInstanceState)时抛出异常null 我不知道它是否因为它缺少一些正确执行super.onCreate(savedInstanceState)所需的信息。 这是我的LoadInst.java中的代码,它扩展到Instrumentation类。

    package com.inst;
    
    import java.lang.reflect.Method;
    
    import android.app.Activity;
    import android.app.Instrumentation;
    import android.os.Bundle;
    import android.os.Looper;
    import android.util.Log;
    import android.view.View;
    
    public class LoadInst extends Instrumentation {
    
        @Override
        public void onCreate(Bundle arguments) {
            super.onCreate(arguments);
            start();
        }
    
        @Override
        public void onStart() {
            super.onStart();
    
            String mainAct= "com.testapps.MainActivity";
            Looper.prepare();
    
            try {
                Class<?> clazz = Class.forName(mainAct);
                Object obj = clazz.newInstance();
    
                Class onCreateParam[] = new Class[1];
                onCreateParam[0] = Bundle.class;
    
                Method onCreateMethod = Class.getDeclaredMethod("onCreate", onCreateParam);
    
                Bundle bundle = new Bundle();
                Log.d("TAG", "test: invoking onCreate()");
                onCreateMethod.setAccessible(true);
                onCreateMethod.invoke(obj, bundle);
    
    
            }
            catch (ClassNotFoundException e) {
                Log.d("TAG", "ClassNotFoundException: " + e.getMessage());
            }
            catch (Exception e) {
                Log.d("TAG", "Exception: " + e.getMessage());
            }
        }
    }
    

    基本上,我的目标是创建一个通用的Instrumentation类来对任何目标类执行测试。所以,说我有app1。 App1是一个简单的Android应用程序,有一个按钮,当你点击按钮时,它会执行一个toast消息。我的目标是使用一个检测类,使用Class加载app1的主要活动,然后调用onCreate()方法以确保初始化任何对象/变量,然后调用btnClick()方法来执行该方法中的代码(在这种情况将是祝酒词。)

    换句话说,当我启动instrumentation类时,我会使用Bundle提供数据,因此检测类将通过bundle解析并提取目标包,目标类和我想要为其执行的方法。目标类。 现在我可以使用Class加载类,然后我可以执行btnClick()方法,但问题是如果在onCreate()期间有初始化的对象/变量,那么如果调用它将导致检测类失败一种方法,它使用在onCreate()期间初始化的那些对象/变量之一。

0 个答案:

没有答案