1

iOS アプリから Android アプリに機能を移植しようとしています。iOS ビュー プログラミング フレームワークである UIKit は-viewDidAppear:animated:、ビュー コントローラーが表示された後に呼び出されるライフサイクル メソッドを提供します。

Android のアクティビティ ライフサイクル管理のドキュメントには、「アクティビティのフォアグラウンド ライフタイムは への呼び出しと への呼び出しの間に発生する」と書かれていますがonResume()onPause()非同期ディスパッチ コードをアクティビティの に追加するとonResume()、そのアクティビティの開始時間が長くなります。

アクティビティを開始し、そのアクティビティがフォアグラウンドで実行された後に任意の作業を行うにはどうすればよいですか?

編集: Androidの「カメラの制御」トレーニングカメラ API ガイドから適応したコードを使用しています。前者には、「Android 独自のカメラ アプリケーションと同様に、カメラにアクセスするための推奨される方法は、から起動された別のスレッドでカメラを開くことです」と書かれていますonCreate()

私は私の最後にこれを持っていますonCreate()

new Thread(new Runnable() {
    @Override
    public void run() {
        mCamera.setPreviewCallback(previewCb);
        mCamera.startPreview();
        previewing = true;
        mCamera.autoFocus(autoFocusCB);
    }
}).start();
4

3 に答える 3

1

AsyncTask を見てください

これは、UI スレッドでバックグラウンド タスクを処理する方法です。

于 2013-07-29T17:49:26.140 に答える
1

一般に、Android のパターンでは、または独自のバックグラウンド スレッドを使用して、アクティビティまたは(実行する必要がある作業の種類に応じて)AsyncTaskから非同期作業を開始します。onCreateonResume

ただし、ビューをレンダリング可能で測定済みの状態にする必要がある場合は、いつでも Activity をリッスンできますonAttachedToWindow。これは、アクティビティのウィンドウが作成され、ルート ビューがアタッチされたときに呼び出されます。 . これは、まだ描画されていることを保証するものではないことに注意してください。そのため、そのメソッドで大量の作業を実行すると、UI スレッドがブロックされ、ユーザー エクスペリエンスが低下する可能性があります。そのため、バックグラウンド スレッドで作業を開始することを検討する必要があります。

于 2013-07-29T17:55:37.193 に答える
0

あなたはこれを試すことができます、

Step1: アクティビティで Tabselected メソッドをオーバーライドする

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    // When the given tab is selected, switch to the corresponding page in
    // the ViewPager.
    try {
    if(MyEventsFragment!=null && tab.getPosition()==3)
    {
        MyEvents.fragmentChanged();
    }
    }
    catch (Exception e)
    {

    }
    mViewPager.setCurrentItem(tab.getPosition());
}

ステップ 2: 静的メソッドを使用して、フラグメントで必要なことを行います。

public static void fragmentChanged()
{
    Toast.makeText(actvity, "Fragment Changed", Toast.LENGTH_SHORT).show();
}
于 2016-01-20T13:02:47.377 に答える