所以,我是一个新的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页面看到完整的源代码。你应该能够检查出来并直接构建它。 –