大家好我正在开发一个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);
}
答案 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...
}