Android devices can behave very different, one from another. You could have slowness in your mail activity, or you could have your device to suddenly decide to clean up memory and make every thing slow slow slow for a moment. If you are relying on timing in hoping that some other process or thread is completed before you delete something, you are playing with fire.
I think a better approach would be to start your e-mail activity for result, like CapDroid did in this answer:
Send Mail:
int EMAIL = 101;
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/html");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[]{});
emailIntent.putExtra(android.content.Intent.EXTRA_BCC,new String[]{});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, pngUri);
startActivityForResult(emailIntent,EMAIL);
Sending Result:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// TODO Auto-generated method stub
if(requestCode==EMAIL)
{
if(requestCode==EMAIL && resultCode==Activity.RESULT_OK)
{
if(myFile.exists())
myFile.delete();
Toast.makeText(mActivity, "Mail sent.", Toast.LENGTH_SHORT).show();
}
else if (requestCode==EMAIL && resultCode==Activity.RESULT_CANCELED)
{
Toast.makeText(mActivity, "Mail canceled.", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(mActivity, "Please try again.", Toast.LENGTH_SHORT).show();
}
}
}