即使活动暂停,我想在计时器勾选时将活动带到前面。
非常感谢..
我的代码如下:
package cem.examples.wsAct;
import something....
public class main extends Activity {
TextView tvResult, tvCount;
Button btn;
Timer timer;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// setviews ....
// (find on the layout and bind them to the fields)
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// bring activity to front
f_UpdateUI();
}
});
}
}, 1000, 3000);
}
void f_UpdateUI() {
String result = f_RetrieveFromWebService();
// ??? Code... ???
// If the activity is sended to back (how can I get it's state?)
// Bring the activity even if it is paused or stopped (here is the lost part)
}
private String f_RetrieveFromWebService() {
// connect to web service and return string
return "ta ta taaaaa";
}
}
答案 0 :(得分:2)
你不能使用AlarmManager
吗?对于我所看到的,即使您的应用不是(在onPause之后,也可能是onDestroy),您需要它才能运行。
如果您不需要它,那么您可以尝试使用startActivity
生成相同的活动并使用一些可用的标记。在您需要时,我不清楚您真正需要什么,所以请尝试查看以下标志:FLAG_ACTIVITY_REORDER_TO_FRONT
,FLAG_ACTIVITY_SINGLE_TOP
,FLAG_ACTIVITY_CLEAR_TOP
...您是否阅读了all the flags ?我敢肯定其中一个(或一组)会做你想做的事。
答案 1 :(得分:0)
要将您的活动置于前台,您需要执行以下操作:
Intent intent = new Intent(context, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
MyRootActivity
必须是您应用的根活动(ACTION = MAIN和CATEGORY = DEFAULT)。
重要的是你必须从非行动语境中做到这一点。您需要从BroadcastReceiver
或Service
。