我有一个可以从PC远程控制的工业应用程序。该应用程序有两个略有不同的版本 - 一个用于Honeycomb平板电脑,另一个用于Gingerbread手机。不同之处在于利用硬件中的独特功能(例如,手机具有更好的相机,平板电脑可以显示更大的图形),但活动启动代码是相同的。
应用程序中的线程从PC接收命令并显示不同的屏幕(即,启动不同的活动)。它在手机上工作正常,但在平板电脑上,一个活动无法启动,但不会抛出异常。断点和登录该活动的 onResume()永远不会被击中,即使它们在手机上也是如此。这是我尝试开始活动的方式。 。 。
try {
Intent svc = new Intent(ctx, RemoteControlActivity.class);
ctx.startActivity(svc);
}
catch (Exception e) { // or ActivityNotFoundException e
Log.d("ShowButtons(normal)", "startActivity failed");
}
(ctx是一个上下文 - 在调试器中,上下文对于处理非工作情况都是相同的)
在平板电脑上未能启动的活动在清单中定义如下。 。 。
<activity
android:launchMode="singleTask"
android:label="@string/app_name"
android:windowNoTitle="false"
android:configChanges="orientation"
android:screenOrientation="landscape"
android:name="RemoteControlActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这让我感到沮丧 - 提前感谢任何帮助!
答案 0 :(得分:0)
试试这个
Intent svc = new Intent(ctx, RemoteControlActivity.class);
svc.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(svc);
根据文档
使用此标志时,如果任务已在您正在启动的活动中运行,则不会启动新活动;相反,当前任务将被简单地带到屏幕的前面,其状态是最后一次
答案 1 :(得分:0)
我找到了解决方案。我以这种方式发布它所以我可以将其标记为“已回答”,其他任何人都会遇到此问题并正在寻找解决方法。但我承认我不明白它为什么会起作用。
突破发现当我尝试启动RemoteControlActivity时,屏幕上当前的活动很重要。当我有一个活动在屏幕上显示一些图形时,失败就发生了。我替换了一个显示一些按钮的不同活动,问题就消失了。
看着清单,我注意到“好”的活动被设定为:
Android:launchMode="singleTask"
并且“坏”的一个被设置为:
Android:launchMode="singleInstance"
当我将图形活动更改为“singleTask”时,问题就消失了。