0

PC からリモートで制御される産業用アプリがあります。アプリにはわずかに異なる 2 つのバージョンがあります。1 つは Honeycomb タブレット用で、もう 1 つは Gingerbread フォン用です。違いは、ハードウェアの独自の機能を利用することです (たとえば、携帯電話のカメラは優れており、タブレットはより大きなグラフィックスを表示できます) が、アクティビティ開始コードは同じです。

アプリ内のスレッドは、PC からコマンドを受け取り、さまざまな画面を表示します (つまり、さまざまなアクティビティを開始します)。電話では問題なく動作しますが、タブレットでは 1 つのアクティビティが開始されませんが、例外はスローされません。ブレークポイントとそのアクティビティの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>

これは私をバタバタさせています-助けてくれてありがとう!

4

2 に答える 2

0

これを試して

   Intent svc = new Intent(ctx, RemoteControlActivity.class);
   svc.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   ctx.startActivity(svc);

ドキュメントによると

このフラグを使用する場合、開始しようとしているアクティビティに対してタスクが既に実行されている場合、新しいアクティビティは開始されません。代わりに、現在のタスクが最後にあった状態で画面の前面に表示されます。

于 2012-12-10T16:34:36.303 に答える
0

解決策を見つけました。他の誰かがこれに遭遇して回避策を探している場合に備えて、「回答済み」としてマークできるように、この方法で投稿しています。しかし、なぜそれが機能するのか理解できないことは認めます。

突破口となったのは、RemoteControlActivity を開始しようとしたときに、現在画面に表示されているアクティビティが重要であることを発見したことです。画面にグラフィックを表示するアクティビティを行ったときに、障害が発生していました。いくつかのボタンを表示する別のアクティビティに置き換えたところ、問題は解決しました。

マニフェストを見ると、「良い」アクティビティが次のように設定されていることに気付きました。

Android:launchMode="singleTask"

そして「悪い」ものは次のように設定されました:

Android:launchMode="singleInstance"

グラフィックアクティビティを「singleTask」に変更すると、問題はなくなりました。

于 2012-12-10T18:20:42.533 に答える