5

通常の開発過程で、特定のアクティビティが2回目に呼び出されたときに応答を停止したように見えることに気付きました。

すなわちmenu->(intent)->activity->(back button)->menu->(intent)

logcatには何も関係ありません。

これのデバッグをどこから開始するか、どのコードを表示するかさえわからないので、ここにonClickonResumeフラグメントがあります。

 if (!dictionary.getClassName().equals("")) {

            this.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {

                    Intent i;

                    i = new Intent(mContext, NVGlobeNavigatorVC.class);
                    i.putExtra("PAGE_TITLE", title);
                    i.putExtra("TITLE", _dictionary._title);

                    mContext.startActivity(i);

            });
        } else {
            findViewById(R.id.greaterthan).setVisibility(View.GONE);
        }

開始されているアクティビティでは、次のようになります。

@Override
protected void onResume() {

    super.onResume();

    ...

マニフェストにも異常はありません。

<activity
    android:name=".NVViews.NVGlobeNavigatorVC"
    android:theme="@style/WindowTitleBackground"
    android:label="GlobeNavigator"/>

わかりやすくするために、とにブレークポイントを設定しmContext.startActivity(i)ますsuper.onResume()。ビューをクリックするonClickListenerと、両方のブレークポイントが期待どおりにヒットします。次に、戻るボタンを押すとメニューに戻ります。 onPause()期待どおりに呼び出されます。

ビューをタッチしてアクティビティを再度起動すると、上のブレークポイントstartActivityがヒットしonResume()ましたが、ターゲットアクティビティにはありません。画面が真っ暗になり、もう一度やり直す唯一の方法はアプリを再起動することです。デバッガーを一時停止すると、一時停止します。これdalvik.system.NativeStart()は、アクティビティが再起動されないことを意味します。

関連性はないと思いますが、Intellij IDEAを使用しており、すべての出力ディレクトリを削除し、キャッシュを無効にして、完全に再構築しました。

ターゲットAPIは8です。2.3と4.0.4でテストしました。

何か案は?私は困惑しています。

[編集]

onPause、私はいくつかのものを設定に保存します。の目的onResume()は、それらを再び取り戻すことです。

@Override
protected void onPause() {

   super.onPause();

   SCPrefs.setGlobeViewViewPoint(globeView.getViewPoint());
   SCPrefs.setGlobeViewZoom(globeView.getZoom());
   SCPrefs.setGlobeViewScale(globeView.getScale());

    }
4

2 に答える 2

4

このコード:

i = new Intent(mContext, NVGlobeNavigatorVC.class);

新しいインテントを作成します。意図はクラスNVGlobeNavigatorVC.classです。

一度呼び出すと、新しいアクティビティが作成され、「iTheFirst」と呼ばれます。アクティビティを取り消すと、「一時停止中」に実行されます。上記のコードを再度実行すると、同じクラスの別の新しいアクティビティが作成されますが、アクティビティは異なります。したがって、他のアクティビティを再開することはありませんが、「iTheSecond」と呼ぶことができる新しいアクティビティを作成します。iTheFirstと同じように見えますが、ユニークです。

上記を再開したい場合は、バックアウトした後、メニューにそれへの参照を保持する必要があります。次に、onClickで、そのアクティビティが存在するかどうかを確認し、存在しない場合は、新しいアクティビティを作成して開始し、存在する場合は再開します。

アクティビティを記憶して再開するサンプルアクティビティは次のとおりです。

Intent savedCueCardActivity = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState, R.layout.landing);
}

public void goToNextScreen(View v) {
    if (savedCueCardActivity == null) {
        savedCueCardActivity = new Intent().setClass(this, CueCardActivity.class);
        startActivity(savedCueCardActivity);
        //       lastActivity.finish();
    } else {
        savedCueCardActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(savedCueCardActivity);
    }
    overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
于 2013-03-15T02:28:12.847 に答える
4

私は問題を見つけました、そしてそれは少し難解です。

クラス静的初期化子にロードされる大きな静的データ構造があります。その初期化子にバグがあり、データ構造がまだロードされている場合に2回目に呼び出されたときに無限ループが発生していました。

そのクラスは私のアクティビティで参照されているため、クラスローダーはそれを前にロードしているonCreate()onResume()、呼び出されています。

ループは、アクティビティローダーがハングしたように見えました。

于 2013-03-18T08:12:05.500 に答える