سؤال

لقد كنت أحاول تحسين تطبيق الخيط الخاص بي والذي يقوم بتحميل مجموعة من البلاط الذي يقوم بمكياج صورة نقطية كبيرة. أصبح التطبيق بطيئًا للغاية عندما يقوم بتحميل البلاط الجديد في ذاكرة النظام. أنا الآن أبحث عن محاولة لاستخدام مهام ASYNC لهذا الغرض. يكتشف التطبيق أي البلاط الموجود في الجزء العلوي الأيسر بطريقة تسمى OnDraw ، ويقوم بإنشاء سلسلة تحتوي على مسار النقطية في مجلد الأصول ، ثم يتحقق لمعرفة ما إذا كانت نقطية لاغية قبل الرسم. إذا كان فارغًا ، فسيتم تحميله في الذاكرة. كانت فكرتي هي معالجة صورة نقطية في DoBackground ، وفي Postexecute Trigger A Viewaidate لعرض صورة نقطية محملة. بعض الأسئلة:

1.) هل يمكنني تنفيذ مهمتي غير المتزامنة لكل صورة نقطية؟ (هذا البيان: جديد myasynctaskmanager (). تنفيذ (bitmappath) ؛ إذا لم يكن الأمر كذلك ، فما هي أفضل طريقة للقيام بذلك لأن الشيء الوحيد الذي سيفعله Async هو مجرد تحميل نقار نقطي في الذاكرة؟

2.) هل من الممكن تعيين Asynctask ذات الأولوية إذا كانت BITMAPs بطيئة جدًا؟

3.) هل هناك طريقة أفضل للقيام بهذا؟ أنا متأكد من أنه تحميل صورة نقطية ، وليس رسم اللوحة التي تبطئ التطبيق.

رمز التزامن المؤقت:

private class myAsyncTaskManager extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... bitmapPath) {
      Log.e("sys","i ran using aTask");
        try {

            bitmapArray[rectBeingDrawn] = BitmapFactory.decodeStream(assetManager.open(imagePathToLoad));


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       return null;
}


@Override
protected void onPostExecute(String result) {
    // execution of result of Long time consuming operation
    mCampusMap.invalidate();
}
}
هل كانت مفيدة؟

المحلول

إضافة إجابة جديدة على سؤالك الجديد تمامًا :)

  1. يعتمد على كمية خلات النقط. كم لديك؟ أنت لا تريد إنشاء العشرات من المواضيع. بعد كل شيء ، لديك نواة واحدة فقط على أجهزتك ، لذلك لن يشتري لك وجود عدة مؤشرات ترابطًا أي شيء - سيحرك تبديل السياق. إذا كان لديك أطنان من خرائط الصورة النقطية ، فقد ترغب في الحصول على طابور من نقار النقط والعمل من خلالها. لذلك ، سيكون الخيط والمعالج أفضل في الواقع.

  2. أنه. بشكل عام ، أقوم بتعيين موضوعات العمال مستوى أولوية أقل من الخيط الرئيسي.

نصائح أخرى

انتظر ، أنت تدعو bitmaploaderthread.run ()؟ من الصعب معرفة ما الذي يحدث لأن هذه قصاصات التعليمات البرمجية بدون سياق (ما هو الخيط الذي يعمل عليه؟ ما هي الوظيفة؟) ، لكنك لا تسمي Run () - هذه هي وظيفة نظام التشغيل! لبدء موضوع جديد ، يمكنك الاتصال بـ START () - سيؤدي ذلك إلى إنشاء مؤشر الترابط الجديد واتصل وظيفة Run (). إذا اتصلت بتشغيل مباشرة ، فأنت لا تزال تتصل به في موضوعك!

بخلاف ذلك - كيف تفعل المصافحة بين الخيطين؟ كيف يخبر مؤشر ترابط العامل الخيط الرئيسي الذي يتم تحميل صورة نقطية؟ يمكنك استخدام معالج لذلك ، أو يمكنك استخدام Asynctask بدلاً من الخيط تمامًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top