رفتن به مطلب
  • 0

لود تعدادی عکس و کم کیفیت شدن و هنگ کردن برنامه


پژمان نیکروان

سوال

سلام :-d

جالب اینجاست این مشکل هنگ در تصاویر و کم شدن کیفیت روی منم اثر گذاشته و واقعا موندم چیکار کنم.

من لیست تعدادی از عکس رو از کارت حافظه فراخوانی کردم و با یک پنل توی اسکرول ویو اضافش کردم.

در مورد عکس های کم به تعداد 16 تا مشکلی پیش نمیاد.

اما تعداد مثلا اگه 25تا باشه موقع لیست کردن عکسا کم کم عکس های دیگه کیفیتشون کم میشه و برنامه هم اصلا انگاه داره میترکه *r24*

error.gif

ما اینجا گرد هم اومدیم تا ببینیم مشکل واقعا چیه؟؟ :-d

آیا بیسیک4اندروید باگ داره که اینجوری میشه؟

آیا راه حلی در سایت اصلی هم وجود نداره؟؟

و در کل دلیل این هنگ و کم شدن کیفیت برای چیه؟

حتی من با تایمر عکسارو 5تا 5تا هم لود کردم اینبار اررور نداد ولی عکسا کم کیفیت شد و اررور هایی همچنان تو لاگ مثل عکس بالا میومد. *fekr*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • پاسخ ها 68
  • ایجاد شده
  • آخرین پاسخ

ارسال‌های توصیه شده

سلام دوستان

من خودم این مشکل رو داشتم . 

برای رفعش از دیزاینر استفاده نکنید . حتی یک لایوت . ( خیلی مهم )

از LoadBitmapSample استفاده کنید . 

اندازه عکس هاتون نباید زیاد باشه . 

با این روش ها دیگه پیغامی برای من نیومد . 

موفق باشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

البته اینجا به یه مشکل برخوردم

 

بعد از زدن هر دکمه که صفحه رو عوض کنه کل صفحه صفید میشه بعد میره صفحه بعد.

 

 

حتی انیمیشن رو هم صفر کردم

 

میشه راهنمایییم کنید کاری میشه کرد؟؟؟

 

چون یکم زشته!

سلام ، کل صفحه سفید میشه؟؟

یعنی میخواد بره به یه اکتیویتی دیر میره؟؟ روی امولاتور تست کردین یا گوشی؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون از همه دوستان بابت مطالب مفیدشون، منم یه سوال داشتم میخواستم ببینم ما بیاییم برای هر موضوعی که تو فهرستمون هس یک اکتیویتی و یک لایوت بسازیم باز برنامه کرش میکنه؟چون الان بیشتر کتابهایی که ساخته میشن یه دونه اکتیویتیه داخلش یه دونه لایوت لود میشه با مطالب مختلف این از این موضوع اگه جواب بدین ممنون میشم.

 

موضوع دیگه که دوستمون گفته از 

Pnlscr.SetBackgroundImage(Null)

 استفاده کنید من الان یه کد دارم که عکسامو از روی دیتابیس لود میکنم داخل یک لایوت به این شکل:

If (AxName = Null OR AxName = "" ) ThenImg1.Visible = False
Label1.Top = Img1.Top
Else
Img1.Bitmap = LoadBitmapSample(File.DirAssets , AxName , Img1.Width , Img1.Height)
End If 

الان این کد null رو کجا استفاده کنم؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

آقا یاااافتم... *laie*

یه چیزایی دستگیرم شد.

دیشب که داشتم میخوابیدم هی بااین برنامه ور رفتم ... اول فقط خود برنامه رو اجرا کردم یعنی صفحه اصلی برنامه رو.

و دکمه Home رو زدم و رفتم قسمت مدیریت برنامه و خواستم مقدار پردازش و رم رو ببینم. نگاه کنید:

20150509111248.png

مقدار RAM الان تو حالت تقریبا عادی ای قرار داره ولی وقتی به قسمت عکسا رفتم دیدم مقدار رم یکم بالا تر رفت.

دوباره از قسمت عکسا اومدم بیرون ... در حالت عادی باید دوباره رم برگرده به حالت اولش مثل عکس بالا اما همونطور موند بااینکه اکتیویتی رو Finish کردم.

بعد دوباره رفتم به قسمت عکسا بازم دیدم مقداری به رم به اندازه حجم همون عکسا اضافه شد.

کم کم گوشی داشت کم میاورد...

که یه بار دیگه رفتم دیدم کم کم داره هنگ میکنه و مقدار RAM رسیده به 49.3 .

این یعنی چی؟؟؟

همونطور که میدونید رم گوشی ها حافظه موقتی هستند که برای پردازش اطلاعات توسط CPU مقداری از اطلاعات رو تو خودشون نگه میدارند.

اما بعضی از دوستان میگن تو گوشی ما خوبه و مشکلی نداره...

خب این طبیعیه که رم گوشی ها با هم تفاوت داره و رمی که قوی تر باشه همون راحت تر اطلاعات بیشتری رو نگه میداره و میده به CPU تا پردازش بشه.

حالا ما میخوایم این برنامه ای که بنویسیم رو این گوشی های ضعیف هم کار بکنه...

چیزی که به ذهن من میرسه حداقل تو پروژه خودم ، عکس هارو صفحه بندی کنم و بعد از ورود به صفحه بعد کلا صفحه قبل رو یه جوری از بین ببرم که رم آزاد سازی بشه.

درضمن یادم رفت بگم... من برنامه ای سبک رو که خودم نوشته بودم اصلا انتظار نداشتم هنگ کنه.

هی باهاش کار کردم تا حدی که RAM رو رسوندم به 50 و این برنامه هم هنگ کرد.

*پس دوستی که تاپیک داده بود بعد از کار کردن با برنامه عکساش کم کیفیت میشه پس دلیلش اینه که رم گوشی شما توان نداره*

بازم رو این موضوع کار میکنم اگه به نتیجه ای رسیدم اینجا میگم تا دوستان استفاده کنن.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اون چیزی که شما میگید در مدیریت اپ نشون میده و افزایش پیدا میکنه با این کتابخانه فکر نکنم کم بشه ..

امروز یک برنامه شبیه برنامه خودم که توسط یک شرکت اپ انلاین طراحی کرده بودم رو تست کردم از 30 مگ شروع شد و به 220 مگ هم رسید و بالاتر نرفت و برنامه هم کرش نکرد و تصویر هم خراب نشد

البته من در مورد تصویر هیچ مشکلی ندارم با همون کد loadbitmapsample حل شد

اما این موضوع بالا رفتن کش نمیدونم چقدر میتونه بد باشه برنامه من تا 200 مگ هم میره بالا

لینک ارسال
به اشتراک گذاری در سایت های دیگر

راه حل دوم از سایت منبع :

من اون برنامه رفع کرش اقای سعیدی رو دیدم تقریبا همون استفاده از sample هست که نمونه تصویر در حافظه نگه میداره . من شخصا از همین راه مشکل حافظه را رفع کردم

اما : کسانی که کارشون با تصاویر هست مثلا گالری یا همچین چیرهایی و مشکل با تصاویر سنگین مخصوصا در imageview دارند باید اینکارو بکنن و تقریبا تنها راه ساده برای این مشکل است که در سایت منبع پیدا کردم.

imageviwe.setbackground = null

در واقع هر ابجکتی رو که نمیخواهید باید اول تصویر اونو خالی کنید و بعد اونو ریمو کنید یا false کنید .

این تنها چیزی هست که برای خالی کردن حافظه بصورت ساده استفاده میشه

کلا هر کجا از loadbitmapsample که استفاده میکنید بعدش اونو با null خالی کنید

نگران حافظه و اعداد نباشید تا زمانی که کرش روی نداده جای نگرانی نیست .

امیدوارم مفید باشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

تو اون جای که میخای اکتیوتیو ببندی ایمج ویوهاتو RemoveView کن ببین درست مشه 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوستان منم فک کنم با همون کدی که دوستمون گفت توی منیفست اضافه کنید مشکلم حل شد ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

******کسانی که این مشکل رو داشتند و مشکلشون حل شده لظفا ج بدید که دقیقا چه باید کرد*****

مشکل من هنوز برطرف نشده

لطف کنید و من رو راهنمایی کنید

عکسای زیادی ندارم

فقط چند تا عکس مختلف که برای button ها استفاده کردم

و بعد از چند بار بار جابه جا شدن بین صفحات تصاویر کم کیفیت میشن.............

 

 

******کسانی که این مشکل رو داشتند و مشکلشون حل شده لظفا ج بدید که دقیقا چه باید کرد*****

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوستان عزیز من نمیتونم این کد رو 

SetApplicationAttribute(android:largeheap,true)

به منیفیست اضافه کنم چون موقع کامپایل چنین خطایی میده مشکل من کجاست؟

B4A version 4.30
Parsing code.                           0.08
Compiling code.                         0.13
Compiling layouts code.                 0.04
Generating R file.                      Error
AndroidManifest.xml:17: error: No resource identifier found for attribute 'largeheap' in package 'android'

با api  های مختلف هم تست کردم باز نشد.

ممنونم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در سایت منبع گفته وقتی شما از loadbitmapsample استفاده میکنید یک کپی از تصویر اصلی در حافظه است و وقتی اون ابجکت موجود نباشه تصویر هم ازبین میره .

من دقیقا از همین کد استفاده کردم و این خطای حافظه از بین رفت و البته به گفته دوستمون نباید از لایه های همسان استفاده کرد چون ممکنه ابجکتها از بین نرن و عکسها لود بمونند.

( من حرفم رو پس گرفتم ... به روش شما چک کردم متاسفانه افزایش استفاده از مموری موقت کاملا مشهوده .. فقط با ورود و خروج از منوها ... حالا روی گوشی های دیگه هم چک میکنم چون روی گوشی خودم کرش نمیکنه اما این مشکل هست باید رفعه بشه . میرم توی سایت منبع ببینم چیزی نوشته شده یا نه .. )

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوستان

من از loadbitmapsample  استفاده کردم و null زدم اما هنوز تصاویرم بی کیفیت میشه

دقیقا بگید چیکار کردید و مانیفست چیه که اون کد رو وارد کردید؟؟؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

یک نفر یک نمونه سورس تمیز که کد نویسی درست و حسابی داشته باشه قرار بده روش کار کنیم ببینم چی به چیه *fekr*

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اون چیزی که شما میگید در مدیریت اپ نشون میده و افزایش پیدا میکنه با این کتابخانه فکر نکنم کم بشه ..

امروز یک برنامه شبیه برنامه خودم که توسط یک شرکت اپ انلاین طراحی کرده بودم رو تست کردم از 30 مگ شروع شد و به 220 مگ هم رسید و بالاتر نرفت و برنامه هم کرش نکرد و تصویر هم خراب نشد

البته من در مورد تصویر هیچ مشکلی ندارم با همون کد loadbitmapsample حل شد

اما این موضوع بالا رفتن کش نمیدونم چقدر میتونه بد باشه برنامه من تا 200 مگ هم میره بالا

ببنید کد من میاد عکس رو در اندازه اصلی لود میکنه که این خیلی مهم هستش واسه همین 2نوع واسه تست قرار دادم که کاربر متوجه بشه شما همون کد هارو از loadbitmapsample در بیارید تست کنید باز هم برنامه کرش نمیکنه من این گونه نوشتم دلیل این بود که اگه یک درصد برنامه احتمال کرش پیدا کنه رفع شه دقت کنید گفتم اگه

ببنید اگر api بالای 21 باشه و از

SetApplicationAttribute(android:largeHeap,"true")

در مانیفست استفاده کنید برنامه اصلا کرش نمیکنه api 21 یعنی برنامه روی اندروید 4 به بالاجواب میده من تازه موزیک رو که خواستم بنویسم خیلی به این ارور ها برخوردم تجربه خوبی بود

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بله من این رو از خود سایت منبع پیدا کردم و در چند جا تاکید شده بود از loadbitmapsample استفاده بشه و در نهایت Null بشه که ظاهرا خود اندروید وقتی تصویر به منبع خودش وصل نباشه از حافظه پاک شده فرض میکنه و رونویسی میشه ..

بله ارور های من همه رفع شد و برنامه هم کرش نکرد خیالتون راحت اون کد هم که بالا زدم و اقای ایمان هم تاکید کرد هم حتما در مانیفیست وارد کنید ..

 

Pnlscr.SetBackgroundImage(LoadBitmapSample(File.DirAssets ,"wall.jpg",300,500))
وقتی کار با هر ابجکت تموم میشه قبل از رموو کردن باید تصویر رو ازش بگیری

Pnlscr.SetBackgroundImage(Null)
به همین سادگی و البته اگر ابجکتهای زیادی داری بهتره یک sub براش درست کنی و اونها رو اونجا پر و خالی کنی

اقای محمدی نمونه همینه اینجا من پنل رو تصویر دادم بجاش هر چی باشه فرقی نداره .

 

 1- سلام ..... کدوم کد رو باید تو مانیفیست  وارد کنیم ؟

2- اگه از این کد استفاده کنیم و ایمیج ویو خالی بشه دیگه نیازی به ریموو کردن نیست درسته ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بچها این مشکل هنوز گریبان من و رها نکردخ منم هنوز این مشکل و دارم الان 20 تا عکس اد کردم خوب اجرا میشه بیشتر که میشه همین مشکل هم پیش میاد خیلی عجیبه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

چجور سورسی میخوای داداش؟

خب چیزی نیست که. مگه عکست رو با LoadBitmap لود نمیکردی؟؟

حالا به جای بزن loadBitmapSample . بعد سایز هم مشخص کن که تو چه سایزی این عکس نشون داده بشه.

اون کدی هم که علیرضا داده بود بذارش تو مانیفست.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • اضافه کردن...