把活动带到前面

时间:2011-06-19 22:42:54

标签: android android-activity timer

即使活动暂停,我想在计时器勾选时将活动带到前面。

非常感谢..

我的代码如下:

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";
}

}

2 个答案:

答案 0 :(得分:2)

你不能使用AlarmManager吗?对于我所看到的,即使您的应用不是(在onPause之后,也可能是onDestroy),您需要它才能运行。

如果您不需要它,那么您可以尝试使用startActivity生成相同的活动并使用一些可用的标记。在您需要时,我不清楚您真正需要什么,所以请尝试查看以下标志:FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_SINGLE_TOPFLAG_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)。

重要的是你必须从非行动语境中做到这一点。您需要从BroadcastReceiverService

执行此操作

另见this answer and the interesting comment thread