1

私のアプリは 1 つのアクティビティから 2 番目のアクティビティに移動します (このアクティビティ コードの一部をここに送信します)。このアクティビティにはマップビューがあります。アプリに2つのマップビューがあるため、このアクティビティで「プロセス」属性を使用する必要がありますが、ランチの前にこの属性を使用すると、アクティビティアプリに黒い画面が数秒間表示され、その後ProgressDialogとアクティビティが表示されます。この黒い画面が出ないようにしたい

これは私のクラスの定義です:

    [Activity (Label = "PropertyShowActivity",
           Process =":PropertyShowMapActivity")]            
public class PropertyShowActivity : MapActivity
{.....}

このアクティビティの onCreate コードは次のとおりです。

protected override void OnCreate (Bundle bundle)
    {
        try {
            base.OnCreate  (bundle);

            RequestWindowFeature (WindowFeatures.NoTitle);
            PD = new ProgressDialog (this);
            PD.SetMessage ("Please Wait...");
            PD.Indeterminate = true;
            PD.SetCancelable (false);
            PD.Show ();
            currentproperty = new Property ();
            SetContentView (Resource.Layout.PropertyShow);
            mapLayout = FindViewById ,,,,<LinearLayout > (Resource .Id.PrptyLocationOnMapLayout);
            mapLayout .Visibility = ViewStates.Gone;



            if (RplSettings.Sitename == string.Empty) {
                RplSettings.LoadAllSettings (this);
            }
            action = Intent.GetStringExtra (AppConstants.Action);
            Pid = Intent.GetLongExtra ("Pid", 0);

            Common .MenuInitialize (this, "Property");
            Common .MenuEventInitialize (this);
            AssignBottomActionBarEvents ();

            FindElemnts ();

            if (Pid == 0)
                Pid = Intent.GetIntExtra ("Pid", 0);

            if (action == string.Empty) {
                PD.Hide ();
                Finish ();
            }
            if (action == AppConstants.DownloadProperty) {
                LoadPropertyData ();
            } else if (action == AppConstants.OfflineProperty) {
                OfflineProperty = true;
                //var path = Intent.GetStringExtra (AppConstants.PropertyFilePath);
                //currentproperty = IOAddOn.ParsePropertyJsonString (UTF8Encoding.UTF8.GetString (Property.LoadPropertyFromSD (path)));
                LoadPropertyData ();
            }


        } catch (Exception ex) {
            Common.HandleException (ex);
        }
    }

また、ddms のログは次のとおりです。以下のようなクラスを定義すると、正常に動作します。

[Activity (Label = "PropertyShowActivity")]         
public class PropertyShowActivity : MapActivity
{.....}
4

2 に答える 2

0

属性を追加するProcessと、新しいプロセスでそのアクティビティを開始するよう Android OS に指示されます。新しいプロセスの読み込みには時間がかかる場合があるため、黒い画面が表示されます (新しいアプリケーションの起動と考えてください)。残念ながら、コードを最適化する以外に、これを回避するためにできることはあまりありません (以下を参照)。

OnCreate()設定の読み込みなど、オーバーライドで多くの作業を行っているようです。このようにバックグラウンドでこれらを実行することをお勧めします。

        Task.Factory.StartNew(()=>
            {
                // load settings here
                // do expensive non-ui work here

                RunOnUiThread(() =>
                    {
                        // do UI work here
                    });
            });
于 2012-11-18T00:53:19.967 に答える
0

同じプロセスで2つのアプリを実行することを解決しましたが、2番目のアクティビティに行った後、新しいアプリの状態をアプリのアプリケーションクラスに保存しました。次に、OnResume で最初のマップ アクティビティを戻すと、mapview の状態を過去の状態に変更します。それは正しく動作します。

于 2012-11-22T05:27:47.003 に答える