您的位置:首页 > 移动开发 > Android开发

android studio instant run 出现类型转换异常

2017-05-16 14:08 330 查看
写在前面的话

一直不乐意写博客。因为在我看来很多自己记记就好了。网站上往往有一大堆的回答。不要自己再去多加一篇copy来的文章了。

但是这次遇到这件坑事。所以人对instant  run  启动后报app类型转换异常都是说不要用instant  run 。我*你妹妹呀。copy能不能有点技术含量啊。不过我的也未必技术含量。但是好歹还是找到可以使用instant  run 的方法。

Instant Run

为什么要用Instant Run

Android studio 2.0以后可以快速启动app。

比如xml布局修改修改的话,application不会重新创建。只会重新加载Activity。

 

之前遇到的问题

在以开始android studio升级到2.0的时候,大家所有电脑运行app的时候都会报错

在ContentProvider报错。

报错内容:

com.android.tools.fd.runtime.BootstrapApplicationcannot be cast to  **APP

 

当时的解决方法是在Setting—>Instant Run中。将第一个选项去掉打钩

但是这个后果是导致,无法使用快速启动的新功能。下面就针对快速运行做处理。

 

概要

Android Studio 2.0 中引入的 InstantRun 是 Run 和 Debug  命令的行为,可以大幅缩短应用更新的时间。尽管首次构建可能需要花费较长的时间,Instant Run 在向应用推送后续更新时则无需构建新的 APK,因此,这样可以更快地看到更改。

 

使用环境要求

仅在您部署调试构建变体、使用 Android Plugin for Gradle 版本 2.0.0 或更高版本,以及在应用的模块级别 build.gradle 文件中将 minSdkVersion 设置为 15 或以上时,Instant Run 才受支持。为获得最佳性能,可以将 minSdkVersion 设置为 21 或更高。

Sdk 15和21的区别

21的好处是。在结构性的代码更改的时候,依然可以使用冷交换来处理。但是21以下,就只能完全部署。

 

Ps:关于冷交换什么的都可以不关注。只是在编译上处理方式的不同。但是对我们开发人员来说唯一的体验就是快。

 

如何配置快速运行?

答:

1.      打开 Settings 或者 Preferences 对话框。打开Instant Run 方法。
2.      所有使用调用获取Application的方法全部换掉(否则依然会类型转换异常)
调用以下的方法: 这个方法抽出来放某个公用地方
publicstatic APPgetRealApplication (Context applicationContext)

{

    APP application = null;

    if (applicationContext
instanceof
APP)

    {

        application = (APP)applicationContext;

    }

    else

   
{

        Application realApplication = null;

        Field magicField = null;

        try

       
{

            magicField =applicationContext.getClass().getDeclaredField("realApplication");

            magicField.setAccessible(true);

            realApplication =(Application) magicField.get(applicationContext);

        }

        catch (NoSuchFieldException e)

        {

            //Log.e(TAG,e.getMessage());

        }

        catch (IllegalAccessException e)

        {

          //  Log.e(TAG, e.getMessage());

        }

        application = (APP)realApplication;

    }

    return application;

}

如何运行

在没有运行项目的时候,我们的Run图标和以前是一样的。

运行成功后:如果前面没有一个闪电一样的图标。表示Instant Run失败

注意事项

使用instant Run 这个的时候。如果只修改xml布局的话,是不会重启application。如果需要将整个全部重启启动。可以点击下图关闭

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐