当前位置: 代码迷 >> Android >> 起动另外一个activity只能在activity里面启动吗
  详细解决方案

起动另外一个activity只能在activity里面启动吗

热度:65   发布时间:2016-04-27 23:08:17.0
启动另外一个activity只能在activity里面启动吗
有没有别的方法可以在普通的java类里启动
------解决思路----------------------
别的方法是没办法的.不过你可以试试用java反射的方式 看能否启动起来
------解决思路----------------------
引用:
Quote: 引用:

普通的java类里  Context 哪里来呢
我都说了用别的方法


各种Start........Activity、service、广播等等,都封装在继承自Context抽象类的ContextImpl里,普通的java类,貌似不行吧.
------解决思路----------------------
class ContextImpl extends Context {
    //整个App的主线程
    final ActivityThread mMainThread;
    //整个App的相关信息
    final LoadedApk mPackageInfo;
    //资源解析器
    private final ResourcesManager mResourcesManager;
    //App资源类
    private final Resources mResources;
    //外部Context的引用
    private Context mOuterContext;
    //默认主题
    private int mThemeResource = 0;
    private Resources.Theme mTheme = null;
    //包管理器
    private PackageManager mPackageManager;

    ................................
//以下是静态区注册系统的各种服务,多大五六十种系统服务,因此每个持有Context引用的对象都可以随时通过getSystemService方法来轻松获取系统服务。
static {
        registerService(ACCESSIBILITY_SERVICE, new ServiceFetcher() {
                public Object getService(ContextImpl ctx) {
                    return AccessibilityManager.getInstance(ctx);
                }});

        registerService(CAPTIONING_SERVICE, new ServiceFetcher() {
                public Object getService(ContextImpl ctx) {
                    return new CaptioningManager(ctx);
                }});

        registerService(ACCOUNT_SERVICE, new ServiceFetcher() {
                public Object createService(ContextImpl ctx) {
                    IBinder b = ServiceManager.getService(ACCOUNT_SERVICE);
                    IAccountManager service = IAccountManager.Stub.asInterface(b);
                    return new AccountManager(ctx, service);
                }});
        ........................

       }

.................
//启动Activity的地方
 @Override
    public void startActivity(Intent intent, Bundle options) {
        warnIfCallingFromSystemProcess();
        if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
            throw new AndroidRuntimeException(
                    "Calling startActivity() from outside of an Activity "
                    + " context requires the FLAG_ACTIVITY_NEW_TASK flag."
                    + " Is this really what you want?");
        }
        mMainThread.getInstrumentation().execStartActivity(
            getOuterContext(), mMainThread.getApplicationThread(), null,
            (Activity)null, intent, -1, options);
    }

..........
//启动服务的地方
@Override
    public ComponentName startService(Intent service) {
        warnIfCallingFromSystemProcess();
        return startServiceCommon(service, mUser);
    }
...............     
}

------解决思路----------------------

把Context作为参数传到普通类里啊
------解决思路----------------------
引用:

把Context作为参数传到普通类里啊

我觉得楼主新建一个类想做点其他操作
------解决思路----------------------
可以将Activity当做参数传给普通的java类。
比如当前activity叫 MainActivity。有一个类叫Test.。那么给他写一个构造方法 Test(Context context)
使用时这样,Test t = new Test(MainActivity.this);
ok 。在Test中你就可以用Intent开启新的activity了
------解决思路----------------------
引用:
可以将Activity当做参数传给普通的java类。
比如当前activity叫 MainActivity。有一个类叫Test.。那么给他写一个构造方法 Test(Context context)
使用时这样,Test t = new Test(MainActivity.this);
ok 。在Test中你就可以用Intent开启新的activity了


可行,实例化普通类的时候把mContext传递进去,我也这么写过
  相关解决方案