0

我有一个广播接收器,它onReceive使用以下标志启动一个活动:Intent.FLAG_ACTIVITY_NEW_TASK

现在,onCreate我的活动方法被调用。当我单击 HOME 按钮时,我的活动回到后台,但现在当onReceive再次调用该函数时,将调用该onRestart方法而不是onCreate.

我希望onCreate每次都会调用它onReceive(我的广播接收器收到的每个事件都需要相同的行为)。

另一件事,我的活动(由广播接收器启动的活动在AndroidManifest.xml文件中有这个标志:android:launchMode="singleInstance".

我这样做是为了防止单击我的应用程序图标会启动我的活动(它不是主要活动)。

任何想法都非常受欢迎。

4

1 回答 1

0

尝试这样的事情。您可以在 onResume() 中启动计时器。每次调用 Activity 再次启动时,如果它已经在运行,您可以从处理程序队列中删除 Runnable 并重新启动它。您不需要在清单中指定 Activity 的启动模式。

   public class MainActivity extends Activity{

    private Handler mHandler;
    private boolean isBroadcastHandled = false;
    private int mCounter = 10;

    private final Runnable runnableThatRunsEvery1Sec = new Runnable() {
        public void run() {
            // Update Your TimerTextView
            if(mCounter == 0){
                // Send SMS accordingly.
            }
            mHandler.postDelayed(this, 1000);
            mCounter-- ;
        }
    };

    // Set Up Click listener for Buttons too

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

    @Override
    protected void onResume() {
        super.onResume();
        if(!isBroadcastHandled){
            // Set Your Time Text View to 10 here.
            mHandler.post(runnableThatRunsEvery1Sec);
            isBroadcastHandled = true;
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        isBroadcastHandled = false;
        mHandler.removeCallbacks(runnableThatRunsEvery1Sec);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mHandler.removeCallbacks(runnableThatRunsEvery1Sec);
    }
}
于 2013-09-15T18:20:08.663 回答