在onPause of Activity中未删除处理程序回调

时间:2015-01-29 13:17:08

标签: android handler

我有两个活动(MainActivity,Sample),它们扩展到我创建的自定义活动(BaseActivity)。我创建了一个处理程序,它在BaseActivity中每5秒运行一次runnable。在BaseActivity中,我已经覆盖了onpause和onresume方法,以便在需要时启动和停止处理程序。 当我在BaseActivity的onPause中删除处理程序的回调时,处理程序停止但在MainActivity暂停时不会停止。下面是代码。

public class BaseActivity extends Activity{

public int mInterval = 5000; 
public Handler mHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("Oncreate baseactivity");
    mHandler = new Handler();       
}

Runnable mStatusChecker = new Runnable() {
    @Override
    public void run() {
        Log.d("MyApp", "every 5 secs");
        mHandler.postDelayed(mStatusChecker, mInterval);
    }
};

@Override
protected void onPause() {
    super.onPause();
    System.out.println("OnPause baseactivity");
    //stopRepeatingTask();
}

void startRepeatingTask() {
    mStatusChecker.run();
}

void stopRepeatingTask() {
    mHandler.removeCallbacks(mStatusChecker);
}


@Override
protected void onResume() {
    super.onResume();
    System.out.println("Onresume baseactivity");
    startRepeatingTask();
}

}

public class MainActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
}

public void newpage(View v){
    startActivity(new Intent(this,Sample.class));
}

@Override
protected void onPause() {
    super.onPause();
    System.out.println("onpause mainactivity");
    stopRepeatingTask();
}

}

public class Sample extends BaseActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView tv = (TextView) findViewById(R.id.txt);
    tv.setText("sample activity");
}   

}

调用BaseActivity和mainActivity的Onpause,但如果应用程序关闭,处理程序仍会运行。我希望很清楚。

1 个答案:

答案 0 :(得分:0)

我认为开始线程我们应该使用start()方法,

并在BaseActivity中编写MainActivity的onPause方法并在MainActivity中删除(我的意思是停止重复任务)。

我希望它有效。