0

こんにちは皆さん、7 つの画面がある 1 つの Android アプリケーションを開発しています。アプリケーションをデバッグすると正常に動作し、4画面でホームボタンをクリックして再度アプリを起動すると、アプリがバックグラウンドに入る同じ画面/ 4画面から開始されますが、ユーザー用にapp.apkファイルを作成すると、彼らがそのアプリを使用してホームキーを押すと、4画面で想定し、アプリを再起動すると、ログイン画面/ 1画面である開始画面から開始されます。何が問題なのか、この問題を解決するために何ができるのか教えてください。

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.dblist);
    setTitle("Databases");

    try {
        jsonObj = new JSONObject(getIntent().getStringExtra("key"));
        nameArray = jsonObj.names();
        valArray = jsonObj.getJSONArray("DbList");
    } catch (JSONException e1) {

        e1.printStackTrace();
    }

    ArrayAdapter<String> dbName = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1);

    for (Integer i = 0; i < valArray.length(); i++) {

        try {
            String obj = valArray.getJSONObject(i)
                    .getString("DataBaseName").toString();
            dbName.add(obj);
        } catch (JSONException e) {

        }

    }
    setListAdapter(dbName);
}


@Override
protected void onResume() {

    super.onResume();

    // versionUpdate();

    Logout lo = new Logout();
    lo.Check();
    processThreadLogoutTime();

}

final Handler handler = new Handler() {

    @Override
    public void handleMessage(Message msg) {

        super.handleMessage(msg);

        int compareTime = 1;

        if (diff >= compareTime) {

            Intent intent = new Intent(ShowDbList.this, LoginActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

        }

    }

};

protected void processThreadLogoutTime() {

    new Thread() {

        public void run() {

            cw = new ConnectToWebService();
            getMethod gm = getMethod.GetApplicationDetails;
            String result = cw.getUrl("", gm);
            String urlLogoutTime = result.replaceAll(" ", "%20");
            cw.LogoutTime(urlLogoutTime);
            Logout logout = new Logout();

            diff = logout.LogoutFun();

            handler.sendEmptyMessage(0);

        }

    }.start();

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    String item = (String) getListAdapter().getItem(position);
    Entities.DataBaseName = item;
    try {
        String webAdmin = valArray.getJSONObject(position)
                .getString("WebAdmin").toString();
        Integer uId = Integer.parseInt(valArray.getJSONObject(position)
                .getString("UserID"));
        Entities.webAdmin = webAdmin;
        Entities.userId = uId;
    } catch (JSONException e) {
        // TODO Auto-generated catch block

    }
    Intent intent = new Intent(v.getContext(), Menu.class);
    startActivity(intent);

}
4

2 に答える 2

0

風影我愛羅の言うとおり、アプリケーションが強制終了されます。アプリケーションが閉じられている場合でも、アプリケーションを最後に起動した場所から開始することを主張する場合は、これを処理する必要があります。onStop が呼び出されるたびに状態を永続的に保存し、ユーザーが onCreate/onStart の正しい場所に送信されるようにします。

于 2012-05-15T07:35:35.363 に答える
0

テストのみを目的として、アプリの APK を URL 経由でダウンロードおよびインストールできるようにしています。携帯電話にダウンロードすると、Android アプリのインストーラーを使用して起動できます。これにより、ユーザーはデバイスにインストールして実行することができます。

上記の方法でアプリをダウンロードして実行したかどうかを検討してください。私のアプリのメイン/ランチャー アクティビティは、ログイン ページ (Activity Act1) です。ユーザーが認証されると、アプリケーションのメイン エリア (Activity Act2 など) に移動します。したがって、このタスクの現在のアクティビティ スタックは Act1> Act2 です。

次に、電話のホームボタンを押すと、Android のホーム画面が表示されます。メニューのアイコンからアプリを再起動すると、アクティビティ B ではなくアクティビティ A に移動します。アクティビティ スタックが Act1> Act2> Act1 になっているか、アクティビティ スタックを持つ 2 つの別々のタスクが Act1> あります。それぞれAct2、Act1。私が望むのは、アプリを再起動したときにアクティビティ B に戻ることです。この状態で戻ると、Activity Act2 に戻ります。

この望ましくない動作は、最初にインストーラーからアプリを開いた場合にのみ発生し、ホーム画面/メニューからアプリを開いた場合には発生しません。

これは、アプリの起動に使用されるインテントが異なるためです。Eclipse は、アクションもカテゴリーもないインテントを使用してアプリを開始します。ランチャーは、android.intent.action.MAIN アクションと android.intent.category.LAUNCHER カテゴリのインテントを使用してアプリを起動します。インストーラーは、android.intent.action.MAIN アクションとカテゴリなしでアプリを起動します。

Eclipse からアプリケーションをデプロイした後は、アプリケーションを完全に終了してください。電話からもう一度起動します。これで問題は解決しますが、一時的な解決策です。

FLAG_ACTIVITY_BROUGHT_TO_FRONT をチェックするとうまくいきます。

    @Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  
        // Activity was brought to front and not created,  
        // Thus finishing this will get us to the last viewed activity  
        finish();  
        return;  
    }  

    // Regular activity creation code...  
}  
于 2012-05-15T12:04:15.313 に答える