gpt4 book ai didi

Android on finish() 重新创建 Activity

转载 作者:太空狗 更新时间:2023-10-29 14:19:26 26 4
gpt4 key购买 nike

如果我尝试完成 Activity ,就会发生奇怪的事情。第一次调用 Activity finish 方法后 - Activity 重新创建。

BroadcastReceiver requestReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
long resultRequestId = intent.getLongExtra(DVSServiceHelper.EXTRA_REQUEST_ID, 0);

if(BuildConfig.DEBUG) Log.d(TAG, "received request id: "+ resultRequestId +", current request id: "+ requestId);

if (resultRequestId == requestId) {
int resultCode = intent.getIntExtra(DVSServiceHelper.EXTRA_RESULT_CODE, 0);

Logger.debug(TAG, "result code: "+ resultCode);

switch(resultCode) {
case HttpsURLConnection.HTTP_OK:
//Dummy intent
Intent in = new Intent();

Logger.debug(TAG, "HTTP OK");

//User logged in successfuly. Finish Login activity
LoginActivity.this.setResult(AuthorizationManager.LOGIN_SUCCESS, in);
Logger.debug(TAG, "setting result...");
LoginActivity.this.finish();
Logger.debug(TAG, "finishing...");

break;
...

Activity 的 onCreate 方法:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_activity);

Logger.debug(TAG, "[onCreate]");
...

LogCat 输出

第一次尝试:

08-14 17:46:00.917: D/(7975): [LoginActivity]        result code: 200
08-14 17:46:00.917: D/(7975): [LoginActivity] HTTP OK
08-14 17:46:00.917: D/(7975): [LoginActivity] setting result...
08-14 17:46:00.937: D/(7975): [LoginActivity] finishing...
08-14 17:46:00.977: D/(7975): [LoginActivity] [onCreate]

秒尝试:

08-14 17:50:25.437: D/(7975): [LoginActivity]        result code: 200
08-14 17:50:25.437: D/(7975): [LoginActivity] HTTP OK
08-14 17:50:25.437: D/(7975): [LoginActivity] setting result...
08-14 17:50:25.537: D/(7975): [LoginActivity] finishing...
08-14 17:50:25.567: D/(7975): [MainActivity] [onActivityResult]
08-14 17:50:25.567: D/(7975): [MainActivity] [onActivityResult]
08-14 17:50:25.567: D/(7975): [MainActivity] [onResume]

已编辑

主 Activity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Logger.debug(TAG, "[onActivityResult]");

if(AuthorizationManager.REQUEST_LOGIN == requestCode) {
if(AuthorizationManager.LOGIN_FAILED == resultCode) {

Logger.debug(TAG, "Login failed!");

Intent login = new Intent(DVSApplication.getContext(), LoginActivity.class);
startActivityForResult(login, AuthorizationManager.REQUEST_LOGIN);
}
}
}



protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Logger.debug(TAG, "[onCreate]");

//if user isn't saved crediantials - show log in activity
if(!AuthorizationManager.getManager(getApplicationContext()).isLoggedIn()) {

Logger.debug(TAG, "[onCreate] user is not logged in!");

Intent login = new Intent(DVSApplication.getContext(), LoginActivity.class);
startActivityForResult(login, AuthorizationManager.REQUEST_LOGIN);
}
...
}

protected void onResume() {
super.onResume();

Logger.debug(TAG, "[onResume]");

//if user isn't saved crediantials - show log in activity
if(!AuthorizationManager.getManager(getApplicationContext()).isLoggedIn()) {

Logger.debug(TAG, "[onResume] User is not logged in!");

Intent login = new Intent(DVSApplication.getContext(), LoginActivity.class);
startActivityForResult(login, AuthorizationManager.REQUEST_LOGIN);
}
}

最佳答案

从主要 Activity 的 onresume() 中删除 startActivityForResult(login, AuthorizationManager.REQUEST_LOGIN);。这样做,您将能够回到主要 Activity 。如果您不想在 Activity 结束后返回到该 Activity ,您也应该将其从 onActivityResult 中移除。

关于Android on finish() 重新创建 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com