我有一个广播接收器,它在onReceive
上使用以下标志开始活动:Intent.FLAG_ACTIVITY_NEW_TASK
。
现在,我的活动的onCreate
方法被调用。当我单击HOME按钮时,我的活动将移回后台,但现在再次调用onReceive
函数时,将调用onRestart
方法而不是onCreate
。
我希望每个onCreate
都会调用onReceive
(我的广播接收器收到的每个事件都需要相同的行为)。
另一件事,我的活动(由广播接收者发起的活动在AndroidManifest.xml
文件中有这个标记:android:launchMode="singleInstance"
。
我这样做是为了防止点击我的应用图标会启动我的活动(不是主要活动)。
任何想法都非常受欢迎。
答案 0 :(得分:0)
尝试这样的事情。您可以在onResume()中启动计时器。每次调用Activity再次启动时,如果它已经运行,您可以从处理程序队列中删除Runnable并再次启动它。您不需要在清单中指定Activity的launchMode。
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);
}
}