首页 > 解决方案 > 由于不活动而在另一个应用程序上时如何阻止我的应用程序弹出

问题描述

我一直在尝试检测我的应用程序中的用户不活动状态,并且确实在 stackoverflow 上找到了一个非常棒的代码,但问题是,当我在另一个应用程序中时,一旦我的应用程序中的计时器启动,让我们说 Whatsapp,我的应用程序就会弹出在屏幕上,我不希望这样,我不希望每次计时器由于不活动而倒计时时弹出我的应用程序。

Pradeep Gupta 的原始代码

请问,我将如何做到这一点?

这是我的代码

public abstract class BaseActivity extends AppCompatActivity {

    Handler handler;
    Runnable r;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        handler = new Handler();
        r = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                Toast.makeText(BaseActivity.this, "user is inactive from last 5 minutes",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(BaseActivity.this,
                        VendorHub.class);
                startActivity(intent);
                finish();
            }
        };
        startHandler();
    }
    @Override
    public void onUserInteraction() {
        // TODO Auto-generated method stub
        super.onUserInteraction();
        stopHandler();//stop first and then start
        startHandler();
    }
    public void stopHandler() {
        handler.removeCallbacks(r);
    }
    public void startHandler() {
        handler.postDelayed(r, 1*60*1000); //for 5 minutes
    }


}

标签: android

解决方案


startHandler();从您的方法中删除onCreate()并添加这两种方法。

@Override
protected void onPause() {
    super.onPause();
    stopHandler();
}

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

您的代码所做的是它设置了 5 分钟的延迟来执行一段代码。每次 Activity 检测到触摸或按键时,它都会重新启动该延迟。

因此,如果用户在您自己的应用程序中闲置 5 分钟,这很有效,因为它将启动 VendorHub 活动。

但是,当用户离开您的应用程序时,您从未停止该处理程序,这会导致您的 VendorHub 活动在 5 分钟后仍会启动。

只需在 中停止处理程序onPause()并再次启动处理程序onResume()

此外,由于onResume()发生在之后onCreate(),这也意味着不需要调用startHandler()onCreate()因为它会在之后立即调用onResume()


推荐阅读