我按照以下方式制作项目:Fetch Messages from Inbox
部分代码:
while (cursor.moveToNext())
{
String address = cursor.getString(1);
String body = cursor.getString(3);
// Loading too long
System.out.println("======> Mobile number => "+address);
System.out.println("=====> SMS Text => "+body);
sms.add("Address=> "+address+"\n SMS => "+body);
}
return sms;
但是,消息太多,需要很长时间才能显示出来。在loding我想要显示动画(progressbar)
谢谢你...
答案 0 :(得分:2)
通常你会在Android上使用AsyncTask这样的东西..
简介: 默认情况下,您使用线程,服务等编写的所有代码都将在UI thread
中执行..这意味着如果您执行那里有一些昂贵的工作,用户界面将被阻止(没有响应)。好的做法是将这么昂贵的任务转移到单独的线程,否则你的app会显示ANR
对话框并被关闭。
如何: 针对您的案例的最佳方法之一是使用AsyncTask ..基本上在onPreExecute()
中显示进度对话框或“正在进行的长期任务“动画。在doInBackground(Params... params)
中,您放置了昂贵的操作代码。如果您需要更新进度条,请从onProgressUpdate(Progress... values)
进行更新。当昂贵的任务完成时,它将为onPostExecute(Result result)
方法提供结果。从这一个,您可以再次更新UI并关闭以前显示的进度对话框。
希望它有所帮助。干杯..;)
答案 1 :(得分:1)
使用Asyntask
,将该代码放入doInBackground
,在processbar
中启动onPreExecute()
,在onPostExecute()
中放弃
答案 2 :(得分:0)
在您的项目中实施Runnable。运行此代码
while (cursor.moveToNext())
{
String address = cursor.getString(1);
String body = cursor.getString(3);
// Loading too long
System.out.println("======> Mobile number => "+address);
System.out.println("=====> SMS Text => "+body);
sms.add("Address=> "+address+"\n SMS => "+body);
}
//return sms;// Make a global variable which can hold values here...
handler.sendEmptyMessage(0);
in
run()
方法。现在开始这样的线程:
Thread fetchSmsThread = new Thread(this);
progressDialog = ProgressDialog.show(context,title,message);
fetchSmsThread.start();
处理程序代码:
Handler handler = new Handler()
{
//////Catch Message Here.. and Dismiss dialog...
///Note You have to declare progress dialog as global so that you can access it here...
}
有关runnable的进一步帮助,请按照以下步骤操作:
How to run a Runnable thread in Android?
如果您不想使用Runnable,请使用Android AsynClass,请按照:
答案 3 :(得分:0)
在main.xml中添加一个带有id的进度条(下例中的yourProgressBarId):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ListView lViewSMS = (ListView) findViewById(R.id.listViewSMS);
final ProgressBar progressBar = (ProgressBar)findViewById(R.id.yourProgressBarId);
progressBar.setVisibility(View.VISIBLE);
new Thread(){
public void run() {
ArrayList sms =fetchInbox();
if(sms!=null)
lViewSMS.post(new Runnable() {
@Override
public void run() {
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, sms);
lViewSMS.setAdapter(adapter);
progressBar.setVisibilty(View.GONE);
}
});
}
}.start();
}