0

大家好,我正在开发一个有 7 个屏幕的 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

仅出于测试目的,我允许通过 URL 下载和安装我的应用 APK。在手机上下载后,可以使用 Android 应用程序安装程序启动它,用户可以选择将其安装到他们的设备上,然后运行它。

考虑我们是否以上述方式下载并运行应用程序。我的应用程序中的主/启动器活动是登录页面(活动 Act1)。一旦用户通过身份验证,他们就会被带到应用程序的主要区域,例如 Activity Act2。所以现在这个任务的当前活动栈是Act1> Act2。

然后我按下手机上的主页按钮并被带到 Android 主屏幕。我通过菜单中的图标重新启动我的应用程序,然后我被带到活动 A,而不是活动 B。活动堆栈现在是 Act1> Act2> Act1,或者现在有两个单独的任务与活动堆栈 Act1> Act2 和 Act1 分别。我想要的是在我重新启动应用程序时回到活动 B。在此状态下按回将带我回到活动 Act2。

这种不良行为仅在我首先通过安装程序打开应用程序时发生,而不是在我通过主屏幕/菜单打开应用程序时发生。

这是由于用于启动应用程序的意图不同。Eclipse 使用没有操作和类别的意图启动应用程序。Launcher 使用具有 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 回答
0

Kazekage Gaara 是对的:你的应用程序被杀死了。如果您坚持从上次的位置启动应用程序,即使它已关闭,您也需要处理此问题。每次调用 onStop 时都会持久保存状态,并确保将用户发送到 onCreate/onStart 中的正确位置。

于 2012-05-15T07:35:35.363 回答