我正在开发包含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上测试。
答案 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()并且之后导致重新加载......