【问题标题】:Android Background issues when user is in active state用户处于活动状态时的Android后台问题
【发布时间】:2018-02-19 06:26:19
【问题描述】:

我正在开发需要用户处于活动功能的应用程序,例如如果用户在应用程序上不可用超过 15 分钟。它会在我们使用的最后一个活动中显示一些弹出窗口,当我们单击“确定”时,它会重定向到登录屏幕。

当我在 15 分钟到大约 30 分钟后重新打开我的应用程序时,它工作得非常好。

我现在的问题是,当我在 45 分钟或超过 1 小时后打开我的应用程序时,它不起作用,它不会显示在活动弹出窗口中。它刚刚打开了我使用的最后一个活动。

我尝试在启动活动中添加以下代码:

if (!isTaskRoot()
               && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
               && getIntent().getAction() != null
               && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

           finish();
           return;
       }

这是我用于活动状态检查的 BaseActivity 类

public class MyBaseActivity extends AppCompatActivity {

    AlertDialog alertDialog;

    Context context;

    public static final long DISCONNECT_TIMEOUT = 900000; // 15 min = 15 * 60 * 1000 ms

    private  Handler disconnectHandler = new Handler(){
        public void handleMessage(Message msg) {
        }
    };

    private Runnable disconnectCallback = new Runnable() {
        @Override
        public void run() {

            LayoutInflater li = LayoutInflater.from(MyBaseActivity.this);
            View promptsView = li.inflate(R.layout.acount_status_dialogue, null);
            final TextView userInput = (TextView) promptsView.findViewById(R.id.txtTitle);
            final TextView userInput1 = (TextView) promptsView.findViewById(R.id.txtTitle1);

            userInput1.setText("USER IN-ACTIVE");
            userInput.setText("Due to user is inactive from last 15 minutes. Please Login Again");

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MyBaseActivity.this,R.style.DialogLevelsStyle);
            // set prompts.xml to alertdialog builder
            alertDialogBuilder.setView(promptsView);
            // set dialog message
            alertDialogBuilder
                    .setCancelable(false)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            //do things
                            Intent i = new Intent(MyBaseActivity.this, SignInActivity.class);
                            //i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(i);
                            finish();
                            Constant.val = 1;
                            AccountUtils.setValue("1");
                        }
                    });

            // create alert dialog
            alertDialog = alertDialogBuilder.create();
            // show it
            alertDialog.show();

            // Perform any required operation on disconnect
        }
    };

    public void resetDisconnectTimer(){
        Log.i("Main", "Invoking logout timer");
        //disconnectHandler.removeCallbacks(disconnectCallback);
        disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT);
    }

    public void stopDisconnectTimer(){
        Log.i("Main", "cancel timer");
        disconnectHandler.removeCallbacks(disconnectCallback);
    }

    @Override
    public void onUserInteraction(){
        resetDisconnectTimer();
    }

    @Override
    public void onResume() {
        super.onResume();
        resetDisconnectTimer();
    }

    @Override
    public void onStop() {
        if (Constant.isAppIsInBackground(this)) {
            stopDisconnectTimer();
            resetDisconnectTimer();
        }else {
            stopDisconnectTimer();
        }
        super.onStop();
        //stopDisconnectTimer();
    }
}

请找出我的问题。提前致谢。

【问题讨论】:

  • “一些弹出窗口”是什么意思?你是说通知吗??
  • 不,它只是在我上次使用的活动中显示一个对话框

标签: android android-alertdialog background-service


【解决方案1】:

当用户将您的应用置于后台时(例如在 SharedPreferences 中)保存当前时间,并在用户再次启动您的应用时计算差异并在屏幕上显示您想要的内容。

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 2021-10-02
    • 2022-01-23
    • 2011-06-11
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多