2017-03-26 10 views
0

이미지 편집기에서 대용량 PNG를 저장하는 속도가 느리기 때문에 작업이 일시 중지 (닫힘) 된 후에 AsyncTask를 사용하여 백그라운드로 저장합니다. 그것은 일반적으로 완벽하게 작동합니다. 하지만 때때로 (몇 시간 동안 백그라운드에서 앱을 유지 한 다음 앱을 포 그라운드로 가져간 다음) 저장이 지연됩니다. 작업을 마친 후 20 초가 지난 것입니다.비동기 PNG 저장이 때로는 느림

당신은 투명성에 대해 걱정하지 않는다
@Override 
protected void onPause() { 
    savePngAsync(); 
} 

public void savePngAsync() { 
    int theBitmapW=Math.max(png_width,MAX_DRAWN_X); 
    int theBitmapH=Math.max(png_height,MAX_DRAWN_Y); 

    Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types 
    Bitmap bmp = Bitmap.createBitmap(theBitmapW, theBitmapH, conf); // this creates a MUTABLE bitmap 
    Canvas canvas = new Canvas(bmp); 
    drawOnCanvas(canvas,true,false); 
    String outputfilename=filename+".png"; 

    AsyncPngSaver asyncPngSaver=new AsyncPngSaver(outputfilename); 
    asyncPngSaver.execute(bmp); 
} 

public class AsyncPngSaver extends AsyncTask<Bitmap,Integer,Boolean> 
{ 
    public String outputfilename; 

    public AsyncPngSaver(String outputfilename) 
    { 
     this.outputfilename=outputfilename; 
    } 

    @Override 
    protected Boolean doInBackground(Bitmap... bitmaps) { 
     try { 
      FileOutputStream out=null; 
      Bitmap bmp = bitmaps[0]; 
      try { 
       out = new FileOutputStream(outputfilename); 
       bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance 
       // PNG is a lossless format, the compression factor (100) is ignored 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        if (out != null) { 
         out.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

    @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
     Log.d(Utils.DTAG,"png saved in background, broadcasting"); 
     Intent in = new Intent(Utils.KEY_REFRESH_BROADCAST); 
     getContext().sendBroadcast(in); 
    } 
} 
+0

왜 asynctask 대신 서비스를 사용하지 않습니까? –

+0

@AjayShrestha 감사합니다. 자습서를 알고 있습니까? – AVEbrahimi

+0

'진짜로 큰 PNG 저장은 느립니다. 큰 비트 맵으로 어지럼 쳐지는 것은 느립니다. 비트 맵을 저장하고 있습니다. 'saveBitmapAsPngAsync()'. – greenapps

답변

0

, 다음 Bitmap.Config.RGB_565

하는 것이 빠른 것 사용하십시오!

Bitmap.Config conf = Bitmap.Config.RGB_565;

+0

실제로 투명도는 용지 색을 선택할 수 있기 때문에 걱정됩니다. :) – AVEbrahimi