我遇到了一个与停止我的Android应用程序有关的奇怪问题。在我的手机上,我有一个主页按钮和一个后退按钮,现在当我按下主页按钮进入我的应用程序后,程序按预期加载来自互联网的数据,但是当我按下后退按钮后进入我的应用程序时,数据无法加载。我已经调试了一定程度,并发现唯一的区别是后退按钮调用onCreate()方法。我很困惑为什么会发生这种情况。
以下是我的一些代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("DAP", "Created");
setContentView(R.layout.activity_ltc);
getActionBar().setTitle("LTC Charts");
getActionBar().setLogo(
getResources().getDrawable(R.drawable.new_litecoin_logo_large));
TextView textView = (TextView) findViewById(R.id.ltcdata);
textView.setText("Loading data...");
TimerTask timer = new TimerTask() {
@Override
public void run() {
parseJSON();
}
};
Timer time = new Timer();
time.schedule(timer, 500, 85);
}
答案 0 :(得分:2)
“按下后退按钮后进入我的应用程序时,数据无法加载。”
如果您已经启动了应用,则当您离开时,活动将暂停(并且会调用onPause)。当您导航回应用程序时,将恢复相同的活动实例(并调用onResume)。
请参阅http://developer.android.com/training/basics/activity-lifecycle/index.html
答案 1 :(得分:0)
这是因为您的活动尚未销毁。您应该做的是在活动的onresume中加入一些内容,以便在您返回活动时再次获取数据。如果您希望确保销毁数据并且用户永远不会离开活动,则可以销毁暂停中的所有内容。
答案 2 :(得分:0)
使用下面的恢复功能。
@Override
public void onResume(){
//will be executed onResume
}
答案 3 :(得分:0)
正如其他人所说,覆盖onResume()
。
一种常见的模式是将常见的初始化代码提取到方法中,并从需要的地方调用它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
@Override
protected void onResume(){
super.onResume();
init();
}
private void init(){
setContentView(R.layout.activity_ltc);
getActionBar().setTitle("LTC Charts");
// ....
}
答案 4 :(得分:0)
这可能是因为您的活动未在AndroidManifest.xml上正确设置。
确保活动名称正确。如果您将活动插入某个包中,则也要包含该名称。例如,我有一个称为“ SettingsActivity”的活动(通常默认为MainActivity),该活动设置在名为“ Activities”的包中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<activity android:name=".Activities.SettingsActivity">
...