监听Activity进入后台(最小化),并根据时间判断是否超时,此解决办法可用于超时重登陆

通过重写一个继承自Activity的基类中的onUserLeaveHint()方法,当用户按Home键等操作使程序进入后台时即开始计时,当用户使程序恢复为前台显示时执行onResume()方法,在其中判断是否超时.

public class BaseActivity extends Activity {
    private static final String TAG = "z";
    private static SharedPreferences pref;
    private static boolean isLeave = false;

    public OfficeBaseActivity() {
        super();
        // TODO Auto-generated constructor stub
    }
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        pref = getSharedPreferences("timeoutcheck", Context.MODE_PRIVATE);
    }


    @Override
    protected void onUserLeaveHint() { //当用户按Home键等操作使程序进入后台时即开始计时
        // TODO Auto-generated method stub
        super.onUserLeaveHint();
        if(!isLeave){
            isLeave=true;
            saveStartTime();
        }
    }
    
    @Override
    protected void onResume() { //当用户使程序恢复为前台显示时执行onResume()方法,在其中判断是否超时.
        // TODO Auto-generated method stub
        super.onResume();
        if(isLeave){
            isLeave=false;
            timeOutCheck();
        }
    }

    public void timeOutCheck() {
        long endtime = System.currentTimeMillis();
        Log.i(TAG, "endtime  == " + endtime);
        Log.i(TAG, "starttime  == " + getStartTime());
        Log.i(TAG, "endtime - getStartTime == " + (endtime - getStartTime()));
        if (endtime - getStartTime()>= 30 * 1000){
            Toast.makeText(this, "超时了", Toast.LENGTH_SHORT).show();
        }
    }

    public void saveStartTime() {
        pref.edit().putLong("starttime", System.currentTimeMillis()).commit();
    }

    public long getStartTime() {
        return pref.getLong("starttime", 0);

    }

}


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在安卓中,可以使用广播(Broadcast)来实现一个后台Activity监听数据并将数据通知给另一个Activity。下面是一种实现方式: 1. 创建一个自定义的广播接收器(BroadcastReceiver)类,用于接收数据。可以在需要监听数据的后台Activity中创建该类。 ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 在这里处理接收到的数据 String data = intent.getStringExtra("data"); // 将数据传递给另一个Activity Intent newIntent = new Intent(context, AnotherActivity.class); newIntent.putExtra("data", data); context.startActivity(newIntent); } } ``` 2. 在后台Activity的onResume()方法中注册广播接收器,并指定接收的广播类型。 ```java public class BackgroundActivity extends AppCompatActivity { private MyBroadcastReceiver receiver; @Override protected void onResume() { super.onResume(); // 注册广播接收器 receiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter("com.example.ACTION_DATA_RECEIVED"); registerReceiver(receiver, filter); } @Override protected void onPause() { super.onPause(); // 取消注册广播接收器 unregisterReceiver(receiver); } } ``` 3. 在另一个Activity中发送广播,包含要传递的数据。 ```java public class AnotherActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 发送广播,将数据传递给后台Activity String data = "要传递的数据"; Intent intent = new Intent("com.example.ACTION_DATA_RECEIVED"); intent.putExtra("data", data); sendBroadcast(intent); } } ``` 这样,当后台Activity接收到广播时,会将监听到的数据传递给另一个Activity(AnotherActivity)。请注意,需要在AndroidManifest.xml文件中声明这两个Activity和权限(如果需要)。 这只是一种实现方式,你也可以考虑使用其他方式,如使用接口回调等。根据你的需求选择最合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值