当应用程序进入后台时如何停止runnable?

时间:2012-11-26 07:14:09

标签: android background runnable

我正在尝试建立一个可以每5秒加载一次广告的可运行的广告(当然5秒太快,它仅用于测试目的)

这是我的代码:

package com.admobsdk_dfp_handler;

import com.google.ads.*;
import com.google.ads.doubleclick.*;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.widget.RelativeLayout;

public class AdMobSDK_DFP_Handler extends Activity {
    private DfpAdView adView;
    private Handler handler = new Handler();
    private Runnable runnable = new Runnable() {

        public void run() {
        adView.loadAd(new AdRequest());
        handler.postDelayed(this, 5000);
    }
    };

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

        adView = new DfpAdView(
                this,
                AdSize.BANNER,
                AD_UNIT_ID);

        RelativeLayout layout = (RelativeLayout) findViewById(R.id.mainLayout);

        layout.addView(adView);

        adView.loadAd(new AdRequest());

        handler.postDelayed(runnable, 5000);


    };

    @Override
    protected void onDestroy() {
        handler.removeCallbacks(runnable);
        super.onDestroy();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_ad_mob_sdk__dfp__handler,
                menu);
        return true;
    }

}

如果我按主页按钮将应用程序隐藏到后台,则runnable会以5秒的间隔加载广告。

当应用程序隐藏在后台时,是否有任何方法可以停止runnable?非常感谢。

3 个答案:

答案 0 :(得分:33)

只需使用onPause()

即可

当某个活动进入后台时被称为活动生命周期的一部分,但尚未被杀死

@Override
protected void onPause() {
     handler.removeCallbacks(runnable);
     super.onPause();
}

可选

如果你想恢复那个可运行的。只需覆盖onResume()回调

即可
@Override
protected void onResume()
{
      handler.postDelayed(runnable, 5000);
      super.onResume();
}

还删除handler.postDelayed(runnable, 5000);

中的onCreate()

答案 1 :(得分:2)

onPause() 您可以放置​​onStop()

handler.removeCallbacks(runnable);个函数

您可以从Look at Activity life circle

获取更多信息

答案 2 :(得分:0)

当应用程序进入后台时调用onPause()。删除onPause()

中的runnable
protected void onPause() {
     handler.removeCallbacks(runnable);
     super.onPause();
}