Android 进度对话框-异步任务
我将ActionBar Tablistener与ViewPager一起使用,我有三个片段 启动时,我的应用程序正在下载我的XML文件数据源,从中填充我的ListView in fragments 启动应用程序时,在AsyncTask中下载XML文件时(当internet连接缓慢时),如何添加“作为简单进度”对话框,以便在下载XML后运行活动 目前我正在使用Android 进度对话框-异步任务,android,xml,android-fragments,android-asynctask,Android,Xml,Android Fragments,Android Asynctask,我将ActionBar Tablistener与ViewPager一起使用,我有三个片段 启动时,我的应用程序正在下载我的XML文件数据源,从中填充我的ListView in fragments 启动应用程序时,在AsyncTask中下载XML文件时(当internet连接缓慢时),如何添加“作为简单进度”对话框,以便在下载XML后运行活动 目前我正在使用SystemClock.sleep(2760)因此有足够的时间以正常连接速度下载 我的主要活动: public class MainActiv
SystemClock.sleep(2760)代码>因此有足够的时间以正常连接速度下载
我的主要活动:
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
TextView mSearchText;
ViewPager viewPager=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.pager);
final ActionBar actionBar=getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
addTabs(actionBar);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
Log.d("VIVZ","onPageScrolled "+i+" "+v+" "+i2);
}
@Override
public void onPageSelected(int i) {
actionBar.setSelectedNavigationItem(i);
Log.d("VIVZ","onPageSelected "+i);
}
@Override
public void onPageScrollStateChanged(int i) {
if(i==ViewPager.SCROLL_STATE_IDLE)
Log.d("VIVZ","onPageScrollStateChanged scroll state idle "+i);
if(i==ViewPager.SCROLL_STATE_DRAGGING)
Log.d("VIVZ","onPageScrollStateChanged scroll state dragging "+i);
if(i==ViewPager.SCROLL_STATE_SETTLING)
Log.d("VIVZ","onPageScrollStateChanged scroll state settling "+i);
}
});
if(isNetworkAvailable()){
Log.i("mobAppModel", "starting download Task");
AppDownloadTask download = new AppDownloadTask();
download.execute();
SystemClock.sleep(2760);
}
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
private class AppDownloadTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
//Download the file
try {
Downloader.DownloadFromUrl("https://URL_on_kategorijeXML.xml", openFileOutput("XMLsource.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
public类MainActivity扩展FragmentActivity实现ActionBar.TabListener{
TextView-mSearchText;
ViewPager ViewPager=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager=(viewPager)findViewById(R.id.pager);
最终ActionBar ActionBar=getActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
actionBar.setDisplayShowTitleEnabled(false);
addTabs(actionBar);
setAdapter(新的MyAdapter(getSupportFragmentManager());
viewPager.setOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
页面上的公共无效已滚动(整数i、浮点v、整数i2){
Log.d(“VIVZ”,“onPageScrolled”+i+“”+v+“”+i2);
}
@凌驾
已选择页面上的公共无效(int i){
actionBar.setSelectedNavigationItem(i);
Log.d(“VIVZ”,“onPageSelected”+i);
}
@凌驾
页面上的公共无效状态已更改(int i){
如果(i==ViewPager.SCROLL\u STATE\u IDLE)
Log.d(“VIVZ”,“onPageScrollStateChanged滚动状态空闲”+i);
如果(i==ViewPager.SCROLL\u STATE\u drawing)
Log.d(“VIVZ”,“onPageScrollStateChanged滚动状态拖动”+i);
如果(i==ViewPager.SCROLL\u STATE\u)
Log.d(“VIVZ”,“onPageScrollStateChanged scroll state Setting”+i);
}
});
如果(isNetworkAvailable()){
Log.i(“mobAppModel”,“开始下载任务”);
AppDownloadTask download=新建AppDownloadTask();
下载.execute();
系统时钟。睡眠(2760);
}
}
专用布尔值isNetworkAvailable(){
连接管理器连接管理器
=(ConnectionManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
返回activeNetworkInfo!=null&&activeNetworkInfo.isConnected();
}
私有类AppDownloadTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…arg0){
//下载该文件
试一试{
Downloader.DownloadFromUrl(“https://URL_on_kategorijeXML.xml,openFileOutput(“XMLsource.xml”,Context.MODE_PRIVATE));
}catch(filenotfounde异常){
e、 printStackTrace();
}
返回null;
}
}
}就我个人而言,我会使用一个在asynctask的postexecute中调用的接口,然后在onpreexecute中启动一个进度对话框,然后在postexecute中调用接口类之前关闭它,在主任务中实现它,并在触发事件时运行下一个代码
乙二醇
不要在活动中调用SystemClock.sleep()
。一旦创建()
方法,您将完全阻塞UI,并可能导致应用程序崩溃。您需要为onPostExecute
提供AsyncTask
方法实现。您的onPostExecute
将在UI线程上运行,因此它可以调用活动中的一个方法,该方法将关闭对话框并更新适配器或其他任何内容。考虑使用一个由<代码> AycCastase<代码>支持的加载器,因为它将是生命周期感知的。如果没有,则需要确保您的活动
正确处理异步任务
的生命周期清理(即调用异步任务.cancel()
异步任务有3个主要的基本重写方法)
1) 预先执行
2) 背景
3) onPostExecute
onPreExcute在AsyncTask开始运行时获取调用..在doInBackGround.之前。。因此,您可以在此处显示进度对话框
doInBackground:在这里,您可以处理您的服务或任何其他长流程。e、 打电话给Webservice。这不是UI线程上的工作
onPostExecute:在doInbackGround完成后调用它。。所以在这里你可以隐藏进度条。这是UI线程上的工作
e、 g
私有类下载文件任务扩展异步任务{
受保护的void onPreExecute(){
showDialog();
}
受保护的Void doInBackground(Void…args){
//下载该文件
试一试{
Downloader.DownloadFromUrl(“https://URL_on_kategorijeXML.xml,openFileOutput(“XMLsource.xml”,Context.MODE_PRIVATE));
}catch(filenotfounde异常){
e、 printStackTrace();
}
}
受保护的void onProgressUpdate(整数…进度){
setProgressPercent(进度[0]);
}
受保护的void onPostExecute(void结果){
//取消对话框。。
}
}
Main Class
public void taskdone();
Async Task
OnPostExecute
MyInterface.taskdone();
Interface
public taskdone();
private class DownloadFilesTask extends AsyncTask<Void,Void,Void> {
protected void onPreExecute() {
showDialog();
}
protected Void doInBackground(Void... args) {
//Download the file
try {
Downloader.DownloadFromUrl("https://URL_on_kategorijeXML.xml", openFileOutput("XMLsource.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Void result) {
//dismiss dialog..
}
}