点击主页键时应用程序会关闭所有活动吗?

时间:2012-05-15 06:10:12

标签: android

大家好我正在开发一个Android应用程序,其中有7个屏幕。 当我调试我的应用程序它工作正常,当我点击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);

}

2 个答案:

答案 0 :(得分:0)

Kazekage Gaara是对的:你的申请被杀了。如果您坚持从最后的位置启动应用程序,即使它已经关闭,您也需要处理它。无论何时调用onStop,都要持久保存状态,并确保将用户发送到onCreate / onStart中的正确位置。

答案 1 :(得分:0)

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

考虑我们是否以上述方式下载并运行应用程序。我的应用中的主/启动器活动是登录页面(Activity Act1)。一旦用户被认证,他们就被带到应用程序的主要区域,例如,活动法2。那么现在这个任务的当前活动堆栈是Act1&gt; ACT2。

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

如果我首先通过安装程序打开应用程序,而不是通过主屏幕/菜单打开应用程序,则会发生此不良行为。

这是因为用于启动应用程序的意图不同。 Eclipse使用没有操作且没有类别的intent启动应用程序。 Launcher使用android.intent.action.MAIN动作和android.intent.category.LAUNCHER类别的intent启动应用程序。安装程序使用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...  
}