Android Launcher应用程序不断被破坏

时间:2015-02-18 15:11:31

标签: android android-webview launcher

我正在开发包含WebView的自定义启动器应用。当我将应用程序作为普通应用程序启动时,在调用startActivity()/ startActivityForResult()(Intent.ACTION_CALL,在使用Intent for MediaStore.ACTION_IMAGE_CAPTURE时不会发生)应用程序调用onPause(),onStop()之后,它可以正常运行和其他活动开始,完成其任务后返回到应用程序。但是,当我将应用程序设置为启动器时,它会在onPause()和onStop()之后立即调用onDestroy()。这种行为是不可取的,因为我正在尝试将插入的数据保存在启动器WebView应用程序中。

onDestroy()之后的logcat中也有很多错误与E / libGLESv2相似或相同:HWUI保护:来自应用程序上下文的错误调用F:ES3-glDeleteBuffers(当不使用它作为启动程序时出现这样的错误,但是偶尔出现在不同的情况下)。

AppManifest包含

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

我也尝试使用singleInstance,安装后该模式应用程序正常工作,但重启后会破坏其行为。

使用minSdkVersion 19,在Android 4.4.2上测试。

2 个答案:

答案 0 :(得分:0)

首先将其更改为类似的内容,

  <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

现在让我们了解 launchMode(s)是什么

通过文档: 机器人:launchMode 有关如何启动活动的说明。 有四种模式与Intent对象中的活动标志(FLAG_ACTIVITY_ *常量)结合使用,以确定在调用活动处理意图时应该发生什么。他们是: “标准” “singleTop” “singleTask” “singleInstance” 默认模式为“标准”。

“singleTask” 不允许 多个实例 系统在新任务的根目录下创建活动,并将意图路由到该任务。但是,如果活动的实例已经存在,系统会通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。

标准” 默认。系统始终在目标任务中创建活动的新实例,并将意图路由到该任务。

“的 singleTop ” 如果活动实例存在于目标任务的顶部,系统会通过调用 onNewIntent ()方法,而不是创建活动的新实例。

<强> singleInstance ” 与“singleTask”相同,但系统不会在持有实例的任务中启动任何其他活动。活动始终是其任务的唯一成员。

有关更深入的内容,请参阅Documentation

答案 1 :(得分:0)

好的,这就是我如何设法解决问题,实际上是什么问题。我用了

    Settings.System.putInt(
            getContentResolver(),
            Settings.System.USER_ROTATION,
           // toRotate //Or a different ROTATION_ constant
            Surface.ROTATION_270
    );

用于屏幕旋转,因为我需要确保应用程序在横向模式下运行。问题是,相机支持横向模式,但拨号器不支持。因此,当我启动摄像头时它没有问题,但是拨号器导致纵向旋转并且在旋转屏幕时导致WebView的默认行为,onDestroy()并且之后导致重新加载......