android中的计时器未调用函数
我用定时器在特定的时间段后调用某些函数 我已经用以下代码完成了这项工作:android中的计时器未调用函数,android,Android,我用定时器在特定的时间段后调用某些函数 我已经用以下代码完成了这项工作: Timer myTimer = new Timer(); myTimer.schedule(new TimerTask() { public void run() { Toast.makeText(getApplicationContext(),"Insidedsfdsf Click " , Toast.LENGTH_LONG).
Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
public void run() {
Toast.makeText(getApplicationContext(),"Insidedsfdsf Click " , Toast.LENGTH_LONG).show();
UpdateTask();
}
}, 1, 1000);
public void UpdateTask() {
// TODO Auto-generated method stub
try
{
Toast.makeText(getApplicationContext(),"update " , Toast.LENGTH_LONG).show();
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
String id = intent.getStringExtra(MainActivity.EXTRA_ID);
String[] lst = null;
String[] lstNew = null;
ListView lm=(ListView)findViewById(R.id.listView1);
TextView tv = (TextView)findViewById(R.id.textView1);
TextView tvNewMessages = (TextView)findViewById(R.id.tvNewMessages);
tv.setText("Welcome " + message);
CallSoap cs=new CallSoap();
lst=cs.GetMessage(id);
lstNew=cs.GetNewMessage(id);
final int numOfMessages=lstNew.length;
//Toast.makeText(getApplicationContext(),"Call "+lstNew.length , Toast.LENGTH_LONG).show();
tvNewMessages.setText("You have "+ numOfMessages +" new messages");
ArrayAdapter<String> adpt = new ArrayAdapter<String>(Messages.this, android.R.layout.simple_list_item_1,lst){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if(position<numOfMessages){
v.setBackgroundColor(Color.RED);
}
else
{
v.setBackgroundColor(Color.WHITE);
}
return v;
}
};
lm.setAdapter(adpt);
}
catch(Exception ex)
{
ex.printStackTrace();
//Toast.makeText(getApplicationContext(),"Call "+ex.getMessage() , Toast.LENGTH_LONG).show();
}
}
请帮助我。计时器任务在不同的线程上运行。Ui应该在Ui线程上更新 因此,您可以使用
处理程序。或者使用runOnUiThread
Handler m_handler;
Runnable m_handlerTask ;
m_handler = new Handler();
m_handlerTask = new Runnable()
{
@Override
public void run() {
// do something
m_handler.postDelayed(m_handlerTask, 1000);
}
};
m_handlerTask.run();
另请将此作为旁注进行检查
编辑:
您每次都在初始化视图。将其移动到onCreate
,并将其声明为类成员
ListView lm=(ListView)findViewById(R.id.listView1);
TextView tv = (TextView)findViewById(R.id.textView1);
TextView tvNewMessages = (TextView)findViewById(R.id.tvNewMessages);
计时器任务在不同的线程上运行。Ui应该在Ui线程上更新
因此,您可以使用处理程序。或者使用runOnUiThread
Handler m_handler;
Runnable m_handlerTask ;
m_handler = new Handler();
m_handlerTask = new Runnable()
{
@Override
public void run() {
// do something
m_handler.postDelayed(m_handlerTask, 1000);
}
};
m_handlerTask.run();
另请将此作为旁注进行检查
编辑:
您每次都在初始化视图。将其移动到onCreate
,并将其声明为类成员
ListView lm=(ListView)findViewById(R.id.listView1);
TextView tv = (TextView)findViewById(R.id.textView1);
TextView tvNewMessages = (TextView)findViewById(R.id.tvNewMessages);
您必须使用以下选项:
Handler h = new Handler();
Runnable r = new Runnable(){
@Override
public void run() {
//perform action here.
h.postDelayed(m_handlerTask, 1000);
}
};
h.run();
您必须使用以下选项:
Handler h = new Handler();
Runnable r = new Runnable(){
@Override
public void run() {
//perform action here.
h.postDelayed(m_handlerTask, 1000);
}
};
h.run();
或者你可以试试看
new CountDownTimer(x, x) {
public void onTick(long millisUntilFinished) {
Toast.makeText(getApplicationContext(),"Insidedsfdsf Click " , Toast.LENGTH_LONG).show();
}
public void onFinish() {
UpdateTask();
}
}.start();
或者你可以试试看
new CountDownTimer(x, x) {
public void onTick(long millisUntilFinished) {
Toast.makeText(getApplicationContext(),"Insidedsfdsf Click " , Toast.LENGTH_LONG).show();
}
public void onFinish() {
UpdateTask();
}
}.start();
无法从TimerTask更新UI。你应该使用runonUiThread。搜索相关答案请看在每个人的份上,不要对新消息进行投票。相反,让Android在新消息到达时告诉你,以防你正在寻找新的短信。或者,如果这是其他自定义消息,则使用GCM。您不能从TimerTask更新UI。你应该使用runonUiThread。搜索相关答案请看在每个人的份上,不要对新消息进行投票。相反,让Android在新消息到达时告诉你,以防你正在寻找新的短信。或者,如果这是其他自定义消息,则使用GCM,但它会让整个应用程序等待该特定消息period@NavatKayAahe我不明白你的要求。你在做什么?我每15-20秒更新一次数据库中的消息,所以当我使用handler时,它是这样做的,但问题是,它不允许让我注销(注销时,我使用textview,点击它,我编写了代码让用户注销)…这就是为什么我使用timer…此代码只被调用一次,我想反复地称它为是的,它正在运行,很好,但它一直在等待整个应用程序,等待那个特定的结果period@NavatKayAahe我不明白你的要求。你在做什么?我每15-20秒更新一次数据库中的消息,所以当我使用handler时,它是这样做的,但问题是,它不允许让我注销(注销时,我使用textview,点击它,我编写了代码让用户注销)…这就是为什么我使用timer…此代码只被调用一次,我想反复地叫它是的,它在运行,很好,thanx