因此,简而言之,我的应用程序具有以下启动过程:
发布时 - >启动StartupActivity
StartupActivity - >启动MyService(startService,长期运行)
MyService将一些文本提供给StartupActivity,直到MyService与服务器的TCP连接为止
MyService然后启动下一个活动LoginActivity
LoginActivity发送登录数据包(通过MyService),当收到回复时(在MyService中),MyService启动下一个Activity,MainActivity。所以:
StartupActivity - > LoginActivity - > MainActivity
|
+ --->为MyService
然后,MainActivity是唯一存在的活动。
我有几个问题:
1)
如果我在任何时间点按HOME按钮然后想要返回应用程序(通过单击应用程序图标)我想返回到按下HOME按钮之前可见的任何活动。它可以是StartupActivity,LoginActivity或MainActivity。
但是,如果我在登录活动时按HOME键,我总是返回StartupActivity(即使已经完成了Finish(),并且使用* Intent.FLAG_ACTIVITY_NEW_TASK *启动了LoginActivity)
2)我还注意到,当我返回应用程序时,StartupActivity的onCreate 始终执行(如上面1中所述)。我希望StartupActivity.onCreate只执行一次(除非它已被销毁,在这种情况下它没有)。当我按下启动图标时,执行onCreate,然后执行onDestroy。我不明白为什么。
3)将应用程序强制应用于“当前”活动的最佳方法是什么?启动器是StartupActivity,但在大多数情况下,我希望显示LoginActivity或MainActivity(如果我们已经达到该状态)。
任何提示和指示都将被赞赏=)
我在想是否应该发布一些代码,但那里没有任何奇怪或奇怪甚至高级的东西。所以我会发布一些作品,以便你把它放在你面前。
MyService.onCreate
public void onCreate(){
super.onCreate();
SRef.clientHandlerLS = new ClientHandler(); // my TCP connection
startupProgressIntent = new Intent("STARTUP_PROGRESS_MESSAGE");
loginProgressIntent = new Intent("LOGIN_PROGRESS_MESSAGE");
mainIntent = new Intent("MAIN_MESSAGE");
ANDROID_ID = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID);
addTextToStartup("Sometext...\n");
loginHandler = new Handler();
startupHandler = new Handler();
createNotification("Starting...", "Starting...", true);
SRef.myService = myBinder;
startupHandler.postDelayed(startupStuff, 1000);
}
这是我从MyService
启动LoginActivity的方法Intent myIntent = new Intent(MyService.this, LoginActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MyService.this.startActivity(myIntent);
StartupActivity.onCreate
@Override
protected void onCreate(android.os.Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.startup);
tv = (TextView)findViewById(R.id.textViewStartupData);
tv.append("StartupActivity.onCreate\n");
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_PROGRESS_MESSAGE"));
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_FINISH"));
registerReceiver(connectionReceiver, new IntentFilter("SERVICE_CONNECTED"));
startService(new Intent(StartupActivity.this, MyService.class));
}