为什么我的活动不会开始?

时间:2012-12-10 16:18:38

标签: android

我有一个可以从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>

这让我感到沮丧 - 提前感谢任何帮助!

2 个答案:

答案 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”时,问题就消失了。