数据库转移到sd卡AsyncTask,ProgressDialog使用

private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> { 
       
private final ProgressDialog dialog = new ProgressDialog(ctx); 
 
       
// can use UI thread here 
       
protected void onPreExecute() { 
           
this.dialog.setMessage("Exporting database..."); 
           
this.dialog.show(); 
       
} 
 
       
// automatically done on worker thread (separate from UI thread) 
       
protected Boolean doInBackground(final String... args) { 
 
           
File dbFile = 
                   
new File(Environment.getDataDirectory() + "/data/com.mypkg/databases/mydbfile.db"); 
 
           
File exportDir = new File(Environment.getExternalStorageDirectory(), ""); 
           
if (!exportDir.exists()) { 
              exportDir
.mkdirs(); 
           
} 
           
File file = new File(exportDir, dbFile.getName()); 
 
           
try { 
              file
.createNewFile(); 
             
this.copyFile(dbFile, file); 
             
return true; 
           
} catch (IOException e) { 
             
Log.e("mypck", e.getMessage(), e); 
             
return false; 
           
} 
       
} 
 
       
// can use UI thread here 
       
protected void onPostExecute(final Boolean success) { 
           
if (this.dialog.isShowing()) { 
             
this.dialog.dismiss(); 
           
} 
           
if (success) { 
             
Toast.makeText(ctx, "Export successful!", Toast.LENGTH_SHORT).show(); 
           
} else { 
             
Toast.makeText(ctx, "Export failed", Toast.LENGTH_SHORT).show(); 
           
} 
       
} 
 
       
void copyFile(File src, File dst) throws IOException { 
           
FileChannel inChannel = new FileInputStream(src).getChannel(); 
           
FileChannel outChannel = new FileOutputStream(dst).getChannel(); 
           
try { 
              inChannel
.transferTo(0, inChannel.size(), outChannel); 
           
} finally { 
             
if (inChannel != null) 
                 inChannel
.close(); 
             
if (outChannel != null) 
                 outChannel
.close(); 
           
} 
       
} 
 
     
} 

你可能感兴趣的:(thread,UI)