Quantcast
Channel: Appcelerator Developer Center Q&A Unanswered Questions 20
Viewing all articles
Browse latest Browse all 8068

Activity has leaked window?

$
0
0

I am having one java class in that class as soon some one purchases our application then it will start downloading and progress dialog has to appear instead it goes to some other page and when i come out of the application and when i restart then it starts downloading. I want to start downloading as soon as user purchases our application from in-App. My DownloadActivity.java in which this window leaked error occurs is as follows

public class DownloadActivity extends Activity implements OnClickListener { private Context mContext = this;

//private static ProgressDialog pDialog;

private LocalBroadcastManager mLocalBroadcastManager;

private String extention = ".png";

private int i = 0;

private SharedPreferences mediaPrefs = null;

public BroadcastReceiver mReceiver;

private static DownloadAsyncTask mDownloadTask;

private final int DOWNLOAD_REQUEST = 3333;

private AvailableSpaceHandler mchekSpace;

public static String PATH = "";

List<DownloadStatus> dList1 = null;

List<DownloadStatus> dummyList1 = null;

List<DownloadStatus> dList2 = null;

List<DownloadStatus> dummyList2 = null;

private int listSize;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_download);
    PATH = Environment.getExternalStorageDirectory().toString()
            + "/Android/data/" + getPackageName();
    Utils.mediaPrefs = this.getSharedPreferences("SHC", 1);
    boolean isVersionPurchased = Utils.mediaPrefs.getBoolean(
            Utils.IS_VERSION_PURCHASED, false);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    mchekSpace = new AvailableSpaceHandler();
    mediaPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    float widthInInches = metrics.widthPixels / metrics.xdpi;
    float heightInInches = metrics.heightPixels / metrics.ydpi;
    double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2)
            + Math.pow(heightInInches, 2));
    // 0.5" buffer for 7" devices
    Boolean is7inchTablet = sizeInInches >= 6.5 && sizeInInches <= 7.5;
    if (is7inchTablet) {
        Utils.downloadDataURL = "http://cdl.tv/silicon/Android/12-April/sw600";
    } else {
        Utils.downloadDataURL = "http://cdl.tv/silicon/Android/12-April/sw720";
    }

    /*pDialog = new ProgressDialog(this);
    pDialog.setTitle("Please wait...");
    pDialog.setMessage("Downloading is in process...");
    pDialog.setProgressStyle(pDialog.STYLE_HORIZONTAL);*/
    DownloadDataImpl mdownloadImpl = new DownloadDataImpl(this);

    if (isVersionPurchased) {
        // requiredSize = 370;
        dList2 = mdownloadImpl.getNewAll(DatabaseHelper.TABLE_NAME_04);
        String[] mFilePathwithFileName2 = null;

        Utils.cLog("Before for loop:: " + dList2.size());

        Collections.shuffle(dList2);
        dummyList2 = mdownloadImpl.getAll(DatabaseHelper.TABLE_NAME_04);
        listSize = dummyList2.size();
    } else {
        // requiredSize = 280;
        dList1 = mdownloadImpl.getNewAll(DatabaseHelper.TABLE_NAME_03);
        String[] mFilePathwithFileName1 = null;

        Utils.cLog("Before for loop:: " + dList1.size());

        Collections.shuffle(dList1);
        dummyList1 = mdownloadImpl.getAll(DatabaseHelper.TABLE_NAME_03);
        listSize = dummyList1.size();
    }

    if (listSize != 0) {
        if (Utils.isNetworkAvailable(getApplicationContext()) == true
                && mchekSpace.getExternalAvailableSpaceInMB() > 650) {
            mDownloadTask = new DownloadAsyncTask(mContext,
                    Utils.downloadDataURL, DownloadActivity.this);

                mDownloadTask.execute();

        } else if (!(mchekSpace.getExternalAvailableSpaceInMB() > 650)) {
            try {
                showMessageDialogSettings(DownloadActivity.this,
                        "No space left on the device.",
                        "Please make sure that you have 630MB free in SDCARD.");
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            try {
                Drawable d = this
                        .getResources()
                        .getDrawable(
                                R.drawable.dialog_you_are_not_connected_to_internet);
                new CustomDialoge(this, d);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } else {
        if (isVersionPurchased && InApp.inapp()) {
            Intent intent = getIntent();
            setResult(RESULT_OK);
            finish();
        } else {
            startActivityForResult(new Intent(DownloadActivity.this,
                    SplashActivity.class), 0);
        }
    }
    mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
    IntentFilter filter = new IntentFilter();
    filter.addAction("cdl.shrihanuman3d.DOWNLOAD_STARTED");
    filter.addAction("cdl.shrihanuman3d.DOWNLOAD_FINISHED");
    filter.addAction("cdl.shrihanuman3d.DOWNLOAD_CANCELLED");
    mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(
                    "cdl.shrihanuman3d.DOWNLOAD_STARTED")) {
                Log.d("status", "Download start");
            }
            if (intent.getAction().equals(
                    "cdl.shrihanuman3d.DOWNLOAD_FINISHED")) {
                Log.d("status", "Download finish");
                startActivityForResult(new Intent(DownloadActivity.this,
                        SplashActivity.class), 0);
            }
            if (intent.getAction().equals(
                    "cdl.shrihanuman3d.DOWNLOAD_CANCELLED")) {
                Log.d("status", "Download cancelled");
            }
        }
    };

    mLocalBroadcastManager.registerReceiver(mReceiver, filter);

}

private boolean mCheckFilesDirs(String mFolderName) {
    File mCheckdir = new File(mFolderName);
    if (mCheckdir.exists()) {
        return true;
    } else {
        return false;
    }

}

public void onClick(View v) {

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0) {
        finish();
    }
}

@Override
protected void onStop() {
    Log.e("TAG", "onStop");
    try {

        mDownloadTask.cancel(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.onStop();
}

@Override
protected void onResume() {
    super.onResume();
    Log.e("TAG", "onResume");
    boolean isVersionPurchased = Utils.mediaPrefs.getBoolean(
            Utils.IS_VERSION_PURCHASED, false);

    if(isVersionPurchased){
        if (listSize != 0) {
            if (Utils.isNetworkAvailable(getApplicationContext()) == true
                    && mchekSpace.getExternalAvailableSpaceInMB() > 650) {
                mDownloadTask = new DownloadAsyncTask(mContext,
                        Utils.downloadDataURL,DownloadActivity.this);

                    mDownloadTask.execute();

            } else if (!(mchekSpace.getExternalAvailableSpaceInMB() > 650)) {
                try {
                    showMessageDialogSettings(DownloadActivity.this,
                            "No space left on the device.",
                            "Please make sure that you have 630MB free in SDCARD.");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                try {
                    Drawable d = this
                            .getResources()
                            .getDrawable(
                                    R.drawable.dialog_you_are_not_connected_to_internet);
                    new CustomDialoge(this, d);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } else {
            if (isVersionPurchased && InApp.inapp()) {
                Intent intent = getIntent();
                setResult(RESULT_OK);
                finish();
            } else {
                startActivityForResult(new Intent(DownloadActivity.this,
                        SplashActivity.class), 0);
            }
        }
    }else {
        startActivityForResult(new Intent(DownloadActivity.this,
                SplashActivity.class), 0);
    }

}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putInt("listSize", listSize);
    Log.i("SHC", "onSaveInstanceState::listSize:: " + listSize);
    super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    listSize = savedInstanceState.getInt("listSize");
    Log.i("SHC", "onRestoreInstanceState::listSize:: " + listSize);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //pDialog.dismiss();
    /*if (DownloadAsyncTask.pDialog1.isShowing()) {
        DownloadAsyncTask.pDialog1.dismiss();
    }

*/ }

public static class DownloadAsyncTask extends AsyncTask<String, Integer, String>
implements OnDismissListener {

final int BUFFER_SIZE = 1024 * 23;

private String fileName;

private String downloadUrl;

private LocalBroadcastManager mLocalBroadcastManager;

private static ProgressDialog pDialog;

private File sdCard = new File(PATH + "/");

private File dir;

private double fileSize = 0;

private List<DownloadStatus> downloadDataList;

private Context mContext;

private String mURL;

public DownloadAsyncTask(Context mContext, String uRL, DownloadActivity dll) {

boolean isVersionPurchased = Utils.mediaPrefs.getBoolean(Utils.IS_VERSION_PURCHASED, false);

DownloadDataImpl downloadImpl = new DownloadDataImpl(mContext.getApplicationContext());

if(isVersionPurchased) {
    downloadDataList = downloadImpl.getAll(DatabaseHelper.TABLE_NAME_04);
} else {
    downloadDataList = downloadImpl.getAll(DatabaseHelper.TABLE_NAME_03);
}

Collections.shuffle(downloadDataList);
this.mURL = uRL;
this.mLocalBroadcastManager = LocalBroadcastManager
        .getInstance(mContext);
//this.pDialog = pDialog;
this.mContext = mContext;
pDialog = new ProgressDialog(dll);
pDialog.setTitle(&quot;Please wait...&quot;);
pDialog.setMessage(&quot;Downloading is in process...&quot;);
pDialog.setProgressStyle(pDialog.STYLE_HORIZONTAL);

}

private boolean checkDirs(String mFolderName, String path) { if (path.contains("Audio")) { dir = new File(sdCard.getAbsolutePath() + "/Audio/"); } else if (path.contains("Video")) { dir = new File(sdCard.getAbsolutePath() + "/Video/"); } else { dir = new File(sdCard.getAbsolutePath() + "/" + mFolderName + "/"); } if (!dir.exists()) { return dir.mkdirs(); } return true; }

@Override protected String doInBackground(String... params) {

for (int i = 0; i &lt; downloadDataList.size(); i++) {
    downloadUrl = downloadDataList.get(i).getPath().toString()
            .trim();
    String[] mListFiles = downloadDataList.get(i).getPath()
            .toString().trim().split(&quot;.rv&quot;);

    String[] separated = downloadDataList.get(i).getFilename()
            .split(&quot; &quot;);
    if (!checkDirs(separated[0], downloadDataList.get(i).getPath())) {
        return &quot;Making directories failed!&quot;;
    }
    fileName = downloadUrl
            .substring(downloadUrl.lastIndexOf(&quot;/&quot;) + 1);

    if (Utils.downloadDataURL.contains(&quot;sw720&quot;)) {
        downloadUrl = downloadUrl.replaceAll(&quot;sw600&quot;, &quot;sw720&quot;);
    }
    downloadUrl = downloadUrl.replaceAll(&quot; &quot;, &quot;%20&quot;);
    String[] dURL = downloadUrl.split(&quot;.rv&quot;);
    try {
        URL url = new URL(dURL[0]);
        HttpURLConnection urlConnection = (HttpURLConnection) url
                .openConnection();
        urlConnection.setRequestMethod(&quot;POST&quot;);
        urlConnection.setDoOutput(true);
        urlConnection.connect();
        fileSize = urlConnection.getContentLength();
        FileOutputStream fos = new FileOutputStream(new File(dir,
                fileName));
        InputStream inputStream = urlConnection.getInputStream();
        byte[] buffer = new byte[1024];
        int bufferLength = 0;
        int percentage = 0;
        double downloadedSize = 0;
        while ((bufferLength = inputStream.read(buffer)) != -1) {
            if (isCancelled()) {
                break;
            }
            fos.write(buffer, 0, bufferLength);
            downloadedSize += bufferLength;
            // percentage = (int) ((downloadedSize / fileSize) *
            // 100);
            if ((i * 100) / downloadDataList.size() &gt; percentage) {
                percentage = (i * 100) / downloadDataList.size();
                publishProgress(percentage);
            }
            if (downloadedSize == fileSize) {
                Log.e(&quot;TAG&quot;, &quot;DownloadSize: &quot; + downloadedSize
                        + &quot; Filesize: &quot; + fileSize);

                boolean isVersionPurchased = Utils.mediaPrefs.getBoolean(Utils.IS_VERSION_PURCHASED, false);

                DownloadDataImpl mDownloadDataImpl = new DownloadDataImpl(mContext);

                if(isVersionPurchased) {
                    mDownloadDataImpl.updateFileStatus(DatabaseHelper.TABLE_NAME_04, fileName, 1);
                } else {
                    mDownloadDataImpl.updateFileStatus(DatabaseHelper.TABLE_NAME_03, fileName, 1);
                }

            }
        }
        fos.close();
        urlConnection.disconnect();
    } catch (Exception e) {
        try {
            boolean isVersionPurchased = Utils.mediaPrefs.getBoolean(Utils.IS_VERSION_PURCHASED, false);
            DownloadDataImpl mDownloadDataImpl = new DownloadDataImpl(mContext);
            if(isVersionPurchased) {
                mDownloadDataImpl.updateFileStatus(DatabaseHelper.TABLE_NAME_04, fileName, 1);
            } else {
                mDownloadDataImpl.updateFileStatus(DatabaseHelper.TABLE_NAME_03, fileName, 1);
            }
        } catch (Exception e2) {
            e.printStackTrace();
        }
        return &quot;Exception&quot;;
    }
    if (isCancelled()) {
        return &quot;isCancelled&quot;;
    }
}
return &quot;dcompleted&quot;;

}

@Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values[0]); if (pDialog != null) { pDialog.setProgress(values[0]); } else { Log.w("status", "ProgressBar is null, please supply one!"); } }

@Override protected void onPreExecute() { pDialog.setOnDismissListener(this); mLocalBroadcastManager.sendBroadcast(new Intent( "cdl.shrihanuman3d.DOWNLOAD_STARTED")); if(pDialog!=null) { if(!pDialog.isShowing()) { pDialog.show(); } } }

@Override protected void onPostExecute(String str) { if(pDialog.isShowing()){ pDialog.dismiss(); } if (str.equals("Exception")) { mLocalBroadcastManager.sendBroadcast(new Intent( "cdl.shrihanuman3d.DOWNLOAD_CANCELLED")); } else if (str.equals("dcompleted")) { mLocalBroadcastManager.sendBroadcast(new Intent( "cdl.shrihanuman3d.DOWNLOAD_FINISHED")); } Log.d("TAG", "Download finished str" + str); }

@Override protected void onCancelled() { mLocalBroadcastManager.sendBroadcast(new Intent( "cdl.shrihanuman3d.DOWNLOAD_CANCELLED")); }

@Override public void onDismiss(DialogInterface arg0) { showDismissMessageDialog(mContext, pDialog, "Quite ?", "It will stop download process.!");

}

}

public static final void showMessageDialog(final Context contex, String title, String message) { if (message != null && message.trim().length() > 0) { Builder builder = new AlertDialog.Builder(contex); builder.setTitle(title); builder.setMessage(message); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) {

                dialog.dismiss();
                ((Activity) contex).finish();
            }
        });
builder.show();

} }

public static final void showMessageDialogSettings(final Context contex, String title, String message) { if (message != null && message.trim().length() > 0) { Builder builder = new AlertDialog.Builder(contex); builder.setTitle(title); builder.setMessage(message); builder.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) {

                dialog.dismiss();
                ((Activity) contex)
                        .startActivityForResult(
                                new Intent(
                                        android.provider.Settings.ACTION_INTERNAL_STORAGE_SETTINGS),
                                0);
            }
        });
builder.setNegativeButton(&quot;Cancel&quot;,
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
                ((Activity) contex).finish();
            }
        });
builder.show();

} }

public static final void showDismissMessageDialog(final Context contex, final ProgressDialog pDialog2, String title, String message) { if (message != null && message.trim().length() > 0) { Builder builder = new AlertDialog.Builder(contex); builder.setTitle(title); builder.setMessage(message); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) {

                dialog.dismiss();
                // pDialog.dismiss();
                if (!mDownloadTask.isCancelled()) {
                    mDownloadTask.cancel(true);
                }
                ((Activity) contex).finish();
            }
        });
builder.setNegativeButton(&quot;Cancel&quot;,
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
                pDialog2.show();
                if (mDownloadTask.isCancelled()) {
                    mDownloadTask.execute();
                }
            }
        });
builder.show();

} }

}

And here is my Error Log

07-17 10:24:14.899: E/TAG(3913): onResume
07-17 10:24:15.075: E/KeyHash:(3913): xbmcYcwUe42kPY5YkZOK10cNv8A=
07-17 10:24:15.227: E/TAG(3913): onStop
07-17 10:24:15.263: E/WindowManager(3913): Activity cdl.shrihanuman3d.DownloadActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{5292810c V.E..... R.....I. 0,0-570,212} that was originally added here
07-17 10:24:15.263: E/WindowManager(3913): android.view.WindowLeaked: Activity cdl.shrihanuman3d.DownloadActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{5292810c V.E..... R.....I. 0,0-570,212} that was originally added here
07-17 10:24:15.263: E/WindowManager(3913):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345)
07-17 10:24:15.263: E/WindowManager(3913):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239)
07-17 10:24:15.263: E/WindowManager(3913):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.Dialog.show(Dialog.java:281)
07-17 10:24:15.263: E/WindowManager(3913):  at cdl.shrihanuman3d.DownloadActivity$DownloadAsyncTask.onPreExecute(DownloadActivity.java:473)
07-17 10:24:15.263: E/WindowManager(3913):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
07-17 10:24:15.263: E/WindowManager(3913):  at android.os.AsyncTask.execute(AsyncTask.java:534)
07-17 10:24:15.263: E/WindowManager(3913):  at cdl.shrihanuman3d.DownloadActivity.onCreate(DownloadActivity.java:132)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.Activity.performCreate(Activity.java:5133)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
07-17 10:24:15.263: E/WindowManager(3913):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 10:24:15.263: E/WindowManager(3913):  at android.os.Looper.loop(Looper.java:137)
07-17 10:24:15.263: E/WindowManager(3913):  at android.app.ActivityThread.main(ActivityThread.java:5103)
07-17 10:24:15.263: E/WindowManager(3913):  at java.lang.reflect.Method.invokeNative(Native Method)
07-17 10:24:15.263: E/WindowManager(3913):  at java.lang.reflect.Method.invoke(Method.java:525)
07-17 10:24:15.263: E/WindowManager(3913):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-17 10:24:15.263: E/WindowManager(3913):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-17 10:24:15.263: E/WindowManager(3913):  at dalvik.system.NativeStart.main(Native Method)
07-17 10:24:15.795: D/status(3913): Download cancelled

Viewing all articles
Browse latest Browse all 8068

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>