标签: activity-finish

活动在finish()之后不调用onDestroy()

我有三个活动,我们称之为一,二,三.从活动ONE开始,按钮按下开始活动TWO.从活动TWO开始,按钮开始活动三.

很简单.

现在,活动THREE需要从应用程序访问一些数据(可能存在也可能不存在).在THREE的onResume()方法中,检查数据,如果不存在则活动结束,如下所示:

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

    /* ... get data from app ... */

    if (data == null) {
        Toast.makeText(this, "Data not found", Toast.LENGTH_SHORT).show();
        finish();
        return;
    }

    /* ... other logic ... */
}
Run Code Online (Sandbox Code Playgroud)

data == null三,完成,摧毁并返回到TWO.一切都很好.现在在TWO中,按后退按钮调用finish()TWO,但TWO从不调用onDestroy().用户返回到ONE就好了,但是任何后续返回TWO的意图都不起作用并且不会抛出任何错误.TWO处于完成(并暂停)的状态,但从未被破坏,因此无法恢复.

那么,为什么在这种情况下三重要?如果我删除finish()上面代码块中的调用,并依赖于"自然"完成三个(通过使用后退按钮),当用户返回到ONE时,TWO已被正确销毁.

好吧,这里真的让人感到困惑......

保持finish()呼叫到位,我可以通过直接从ONE启动THREE来缓解挂断,然后"自然地"完成它(后退按钮).在THREE被销毁(第二次)之后,TWO按预期打开.

我读过的一切都已经说我应该是确定通话finish()onResume()的一项活动.但在这种情况下,它会使某些状态处于不良状态,并阻止我破坏呼叫活动.

想法?还是我把你的大脑翻了个遍?

编辑:

进一步的探索发现了这颗宝石......

finish()使用postDelay()大约500毫米的处理程序在THREE 周围调用将允许TWO按预期关闭.像这样:

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

    /* ... get data from app …
Run Code Online (Sandbox Code Playgroud)

android onresume activity-finish

5
推荐指数
1
解决办法
9742
查看次数

如何在android中的非活动类中实现类似"完成"的东西?

此对话框询问您是否要安装其他应用程序...所以当onclicked没有按钮时,它必须返回到上一个屏幕

    downloadDialog.setNegativeButton(stringButtonNo,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
                         finish();
                }
            });
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

对于类型new DialogInterface.OnClickListener(){},未定义方法finish()

我怎么能实现我想要的???

package com.Android.barcode;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class BarcodeActivity extends Activity {
    public static String upc;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        IntentIntegrator.initiateScan(this);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case IntentIntegrator.REQUEST_CODE: {
            if (resultCode != RESULT_CANCELED) {
                IntentResult scanResult = …
Run Code Online (Sandbox Code Playgroud)

android activity-finish android-alertdialog

5
推荐指数
2
解决办法
4484
查看次数

完成除一个以外的所有活动

当我使用这种方法时,我会回到登录页面,但我仍然可以点击返回按钮,它会将我返回到上一个活动.为什么不关闭其他活动?

public void restartApplication() {
        Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);   
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法完成除登录活动之外的所有活动?或重新启动整个应用程序?

android activity-finish android-activity

5
推荐指数
1
解决办法
2043
查看次数

Android:什么时候用finish()结束课程?

我经常看到以类结尾的类的例子finish(),但绝对不是总是如此.我的问题是你什么时候结束课程finish()?它究竟做了什么,用后退按钮结束一个类并用它结束它有finish()什么区别?

提前致谢!

java android class activity-finish

5
推荐指数
1
解决办法
1万
查看次数

android-finish() 关闭应用程序而不是活动

我是一个初学者 android 程序员,我似乎有一个问题:我打开新活动,用

Intent newGameIntent = new Intent(actionName);
startActivity(newGameIntent);
Run Code Online (Sandbox Code Playgroud)

一切正常,活动打开。但是当我调用 finish() 时,它不会进入 previus 活动,它只是关闭应用程序(没有错误或其他日志消息)

有谁知道为什么会这样?谢谢你的时间!

根据要求,这里有更多代码(我可能完全搞砸的东西):第一个活动:

@Override
protected void onStop() {
    super.onStop(); 
    SplashScreen.sounds.releasSounds();
    finish();
}
@Override
protected void onPause() {
    super.onPause();
    pauseActivity();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    gameLoop.resumeThread();
    SplashScreen.sounds.resumeSounds();
}

private void pauseActivity() {
    gameLoop.pauseThread();
    SplashScreen.sounds.pauseBck();
}
Run Code Online (Sandbox Code Playgroud)

和调用秒活动的第一个活动

Intent newGameIntent = new Intent("com.YuvalApps.menus.NEWGAMEMENU");
    startActivity(newGameIntent);
Run Code Online (Sandbox Code Playgroud)

和秒活动

    @Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    finish();

}
Run Code Online (Sandbox Code Playgroud)

android android-intent activity-finish android-activity

5
推荐指数
1
解决办法
4331
查看次数

如何通过Android中的ActivityOptions对finish()进行动画制作?

我正在开发一个有两个活动的应用程序,Main和Info.应用程序以MainActivity启动,当您单击按钮时,InfoActivity从右侧滑入.当您单击另一个按钮时,InfoActivity将再次向右滑动并返回Main.

这就是我在MainActivity中实现动画和按钮单击的方法:

buttonInfo.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) {
       Intent i = new Intent(getApplicationContext(), Info.class);
       Bundle mAnimate = 
          ActivityOptions.makeCustomAnimation(getApplicationContext(),
           R.anim.ani1,R.anim.ani2).toBundle();

          startActivity(i,mAnimate);
            }
        });
Run Code Online (Sandbox Code Playgroud)

我在InfoActivity中做了类似的工作,效果很好.但是,我想要并且需要使用intent调用finish()而不是startActivity,因为我在MainActivity中有一个服务器连接,当我调用startActivity时它会断开连接.

任何想法如何将这样的动画应用于finish()方法或其他建议?

android bundle android-animation activity-finish

5
推荐指数
2
解决办法
7177
查看次数

Android - 如何结束片段

在我的应用程序中,我有一个导航抽屉,我的应用程序的工作方式是只有一个活动,如果您从导航抽屉中选择一些东西,它会启动/替换当前片段.我怎样才能这样做,以便当从导航抽屉中选择某些内容并且新片段开始时,旧片段结束

我不能

@Override
public void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    getActivity().finish();
}   
Run Code Online (Sandbox Code Playgroud)

因为只有一项活动会杀死应用程序.

我如何杀死片段?

编辑:我的片段交易

Home HomeFragment = new Home();
        transaction.replace(R.id.llhome, HomeFragment);
        transaction.addToBackStack(null);
        transaction.commit();
              mDrawerList.setItemChecked(position, true);
                mDrawerLayout.closeDrawer(mDrawerList);
Run Code Online (Sandbox Code Playgroud)

谢谢

java android android-fragments onpause activity-finish

5
推荐指数
2
解决办法
2万
查看次数

活动结束得太慢了

在我的活动'A'中,我正在使用计时器和媒体播放器来播放音频.我的应用程序正在设置活动说活动'B',用于选择音频播放模式.我正在使用 startActivityForResult()并从活动B发送resultCode.问题是活动B花费了太多时间来完成.因为B中的音频在B完成之前开始.怎么处理这个?

我的活动B callig代码是:

Intent intent = new Intent(context, Setting.class);
        startActivityForResult(intent, Cover.SETTING_REQ);
Run Code Online (Sandbox Code Playgroud)

我的活动B有以下代码:

public class Setting extends Activity {
    Context context;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
        context = this;
        final RelativeLayout layout = (RelativeLayout) findViewById(R.id.setting_layout);
        Display display = getWindowManager().getDefaultDisplay();
        final int width = display.getWidth();
        final int height = display.getHeight();
        int[] modes = { R.drawable.settingspageiphone, R.drawable.readtome,
                R.drawable.readwithpause, R.drawable.icanreadit };
        Bitmap bm = BitmapLib.prepairBitmap(context, modes[Read.mode], width,
                height);
        layout.setBackgroundDrawable(new BitmapDrawable(bm));
        layout.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent …
Run Code Online (Sandbox Code Playgroud)

android activity-finish android-activity

5
推荐指数
1
解决办法
1603
查看次数

Android,finish()关闭应用程序的活动

我将结果称为活动:

private static final int CODE_LOGIN = 0;
private static final int CODE_DETAILS = 1;

private void callDetailsActivity() {
    Intent switchToDetailsActivity = new Intent(getApplicationContext(), Details.class);
    switchToDetailsActivity.putExtra(TAG_ID, details.get(TAG_ID));
    startActivityForResult(switchToDetailsActivity, CODE_DETAILS);
}
Run Code Online (Sandbox Code Playgroud)

现在在我的Details.class中,我打电话回到上一个活动:

@Override
public void onBackPressed() {
    setResult(RESULT_OK);
    super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

然后是我的 onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CODE_LOGIN) {
                // This is for my other Activity, where the "return" works
        }
    }
    updateOffers(); …
Run Code Online (Sandbox Code Playgroud)

android activity-finish android-activity

5
推荐指数
1
解决办法
4122
查看次数

finish()完成活动,但仍然在后台

我有一个关于android studio中活动的finish()方法的问题:

我有这个简单的代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的activity_main中,我只需要一个按钮.当我点击按钮时,活动结束,然后我回到设备的主屏幕......但是,当我点击设备的菜单按钮(显示所有应用程序在后台运行)时,我仍然看到我的活动......我不想要那个.我该如何解决?

android activity-finish

5
推荐指数
1
解决办法
1139
查看次数