所以,我是一個新的Android開發人員,但我正在取得進展。我有一個MainActivity
這是我啓動,然後一組子活動做一些工作。Android從Activity返回
我目前正在努力讓這些子活動超時並返回MainActivity
以避免永遠坐在某個隨機窗口上。這是一種Kiosk
類型的應用程序,我正在努力,因此需要返回MainActivity
。
我已經能夠在我的子活動類中使用Handler and Runnable()
進行這項工作。如果我在處理程序超時並調用Runnable.run()
時執行以下操作,它可以工作,有點。
Intent intent = new Intent(LightsActivity.this, MainActivity.class);
startActivity(intent);
但是,這會導致MainActivity再次運行onCreate
。由於MainActivity已經在後臺運行,我想返回到該實例而不是啓動一個新的實例。
我想我要做的就是在Runnable中調用finish()
並讓它關閉活動並返回Main。這是行不通的。我看到MainActivity onStart()
運行,而不是onCreate()
,這是我想要的。
但是,屏幕上顯示的是LightsActivity設計佈局,但沒有LightsActivity
類實際運行。我在LightsActivity.onCreate()
中創建了一些定時器,它在運行時每秒更新一次字段,但在我呼叫finish()
(再次,預期)後,這些定時器停止工作。停止一個Activity類並將UI更改回MainActivity
窗口有什麼竅門?
我做錯了什麼或這是一個錯誤。所有的文件說finish()
應該做我想要的。請注意,調用LightsActivity.this.finish()
在Runnable中也不起作用,所以這不是我不認爲的範圍問題。
希望有很多Android經驗的人可以幫助我。
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
public void viewLights(View view) {
Log.d(TAG, "Managing the lights");
setContentView(R.layout.activity_lights);
startActivity(m_lights);
}
}
public class LightsActivity extends Activity {
private static final String TAG = LightsActivity.class.getSimpleName();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lights);
handler.postDelayed(finalizer, 1000 * 10);
Log.d(TAG, "onCreate()");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
Runnable finalizer = new Runnable()
{
public void run()
{
Log.d(TAG, "Activity timed out");
finish();
}
};
}
我得到以下輸出。我可以用這個簡單的例子重現,所有其他代碼都被註釋掉了。
07-19 13:20:37.761 1363-1363/? D/MainActivity: onCreate()
07-19 13:20:37.767 1363-1363/? D/MainActivity: onStart
07-19 13:21:20.280 1363-1363/com.home.pete.aquarium D/MainActivity: Managing the lights
07-19 13:21:20.569 1363-1363/com.home.pete.aquarium D/LightsActivity: onCreate()
07-19 13:21:20.571 1363-1363/com.home.pete.aquarium D/LightsActivity: onStart
07-19 13:21:21.089 1363-1363/com.home.pete.aquarium D/MainActivity: onStop
07-19 13:21:30.579 1363-1363/com.home.pete.aquarium D/LightsActivity: Activity timed out
07-19 13:21:30.615 1363-1363/com.home.pete.aquarium D/MainActivity: onStart
07-19 13:21:31.100 1363-1363/com.home.pete.aquarium D/LightsActivity: onStop
07-19 13:21:31.100 1363-1363/com.home.pete.aquarium D/LightsActivity: onDestroy
LightsActivity屏幕仍然顯示,而不是MainActivity。
對不起,是的,但這並沒有幫助。 –
您可以創建一個[mcve]所有相關的代碼嗎? –
我不認爲我可以在這裏發佈完整的最小化,完整和可驗證。我知道如何發佈的代碼本身不會在沒有大量Android Studio必要工作的情況下生成。不過,你可以在我的https://github.com/buelowp/aquarium頁面看到完整的源代碼。你應該能夠檢查出來並直接構建它。 –