ورود

View Full Version : مشکل در اجرا شدن برنامه



r_cyber2001
سه شنبه 03 اردیبهشت 1392, 13:36 عصر
با سلام خدمت اساتید و دوستان

چرا بعضی نرم افزار های روی بعضی گوشی ها اجرا نمیشند؟
برای مثال من یه نرم افزار نوشتم, روی چند گوشی امتحان کردم, کار کرد, اما مثلا روی galaxy fit کار نکرد

Modernidea
سه شنبه 03 اردیبهشت 1392, 20:58 عصر
سلام

دلایل گوناگونی در این باره وجود دارد.

چند نمونه که من تجربه کردم و میدانم را مثال میزنم:

- بعضی از کلاس ها یا توابع در نسخ مختلف سیستم عامل اندروید اصلا وجود ندارد و قابل اجرا نیستد و زمانی که این تابع یا کلاس فراخوانی میشود برنامه اصطلاحا Crash میکند یا Force Close میدهد. سایت گوگل این نوع کلاس ها و توابع را با صفت Deprecated (http://developer.android.com/reference/java/lang/Deprecated.html) مشخص میکند و معمولا موقع کامپایل برنامه، کامپایلر هشدار میدهد که این تابع Deprecate شده است. برای مثال در این لینک (http://developer.android.com/reference/android/view/GestureDetector.html) گوگل مشخص کرده است که کلاس مربوطه در API 3 وجود ندارد(جدول دوم، خط دوم).
پس اگر قصد دارید برنامه بنویسید که در همه نسخ مختلف اندروید بدون خطا کار کند، باید هر تابع و کلاسی که میخواهید در برنامه خود استفاده کنید را بررسی کنید که Deprecate نشده باشد.

- گاهی وقتها اگر قصد شمارش کردن شئ داشه باشید که مقدار null در آن قرار گرفته است، در برخی گوشی ها با بهتر بگوییم، نسخ سیستم عامل اندروید خطا میدهد و از برنامه خارج میشود. من شخصا این موضوع را تجربه کردم. تابعی بود که لیست پوشه های موجود در یک میسر مشخص را گرفته و تعداد آنها را بر میگرداند، هنگام اجرای تابع شمارش تعداد پوشه ها، به علت اینکه آن مسیر(پوشه ها) هنوز ایجاد نشده بوده و تابع قصد شماره تعداد null تا شئ(پوشه) را داشت، خطا تولید شده و برنامه بسته میشد. اما این موضوع فقط در برخی از نسخه های اندروید خطا گرفته میشد(*.2).
برای جلوگیری از این خطا باید ابتدا بررسی کنید که اگر شئ مورد نظر null نبوده و مقدار دهی شده است، سپس عملیات مورد نظر را روی آن انجام دهید.

- نبستن Connection باز شده

- استفاده زیاد از Ram (فضای رم هر دستگاه متفاوت است)

و غیره.

موفق باشید.

poorman
سه شنبه 15 بهمن 1392, 12:46 عصر
سلام

دلایلی که دوست عزیز Modernidea نوشتن برام جالب بود
من یک نرم افزار ساختم ، روی چند تا گوشی تست کردم ، روی چند تا به خوبی اجرا میشد ، ولی روی چند گوشی مثل sony acro S و galaxy s3 یک سری خطا داشت
من اومدم از try catch در همه قسمت ها استفاده کردم تا بفهمم خطا از چه قسمتی هست و نسبت به اون toast چاپ کنه ، اما بازم توی این گوشی ها force close میداد و toast رو نشون نمیداد
حالا با اینکه میدونم تقریبا کدوم قسمت از کار مشکل داره
اما مشکلم اینجاست که نمیدونم چطور برای دستوراتم جایگزین مناسب پیدا کنم

مثلا اولین مشکلم استفاده از shared preferences بود که مجبور شدم با sql مشکل رو حل کنم
ولی الان یک سری مشکل جزئی هست ، مثلا استفاده از دستور setScaleType برای عکس ، این رو من الان باید چطوری حلش کنم ؟؟؟

Modernidea
سه شنبه 15 بهمن 1392, 13:07 عصر
دلایلی که دوست عزیز Modernidea نوشتن برام جالب بودامیدوارم که در آینده کمکتون کنه و موجب صرفه جویی در وقتتون بشه :)


ولی الان یک سری مشکل جزئی هست ، مثلا استفاده از دستور setScaleType برای عکس ، این رو من الان باید چطوری حلش کنم ؟؟؟ایده که به ذهن من میرسه اینکه دوتا کلمه کلیدی را در گوگل سرچ کنید: setScaleType + galaxy s3
لطفا نتیجه را اعلام کنید.

موفق باشید

poorman
پنج شنبه 17 بهمن 1392, 13:49 عصر
متاسفانه من نتونستم مشکلم رو حل کنم
فک کردم مشکل از تابع setScaleType باشه ، اما با اینکه کدهام رو عوض کردم ، برنامه توی گوشی acro S کرش کرد
با اینکه کدهام هیچ تابع خاصی نداره !!!
یک بار که ارور داد کلا مال قسمت setContent اکتیویتی بود !!! بعدش باز دیگه توی قسمت های دیگه ارور داد که اونا هم هیچ کد پیچیده ای نیست ، فقط set کردن عکس هست !!!
جالب اینجاست که روی گوشی z ultra که اندروید 4.2 داره اجرا کردم بدون کوچک ترین اشکالی ، اما acro S که اونم اندرویدش 4.2 هست اجرا نمیکنه درست !!!
روی تبلت htc mini هم تست شد بدون مشکل بود
اما روی تبلت سامسونگ که مدلش رو نمیدونم نصب نشد !!!
من واقعا گیج شدم :(

mrtzxxx
جمعه 18 بهمن 1392, 11:22 صبح
منم این مشکل رو دارم که برنامم روی یه سری گوشی جواب میده روی یه سری گوشی کرش میده یکی از دوستان راهنمایی کرد و گفت بالای کلاسهای برنامت از این خط استفاده کن ولی نمیدونم فایده ای داره یا نه چون وقت نکردم امتحان کنم:
@SuppressLint("NewApi")

poorman
جمعه 18 بهمن 1392, 13:02 عصر
دوستان من دلیل اصلی مشکلم رو پیدا کردم
مشکل اصلی من استفاده زیاد از حافظه رم بود ، اون هم به دلیل سر و کار داشتن با عکس های کیفیت دار
برای رفع مشکل حافظه ، یک راه حل اینه که در هر قسمت حافظه ی اختصاص داده شده به هر عکس bitmap رو آزاد کنید ( البته بعد از اینکه مطمئن شدید از اون استفاده نخواهید کرد )
مورد دیگه عکس های با کیفیت بالا هست که لود کردن اونها در برنامه ، به علت اینکه رزولوشن گوشی محدود هست ، حجم زیادی رو از حافظه میگیره که لازم نیست
الان دارم روی این مورد کار میکنم تا مشکل رو حل کنم !!!
چیزی که مهمه اینه که برای تغییر کیفیت و اندازه نباید عکس ها رو توی layout مقدار بدید و باید در شروع اکتیویتی این کار رو انجام بدید
ولی خب توی همین تغییر اندازه و کیفیت فعلا گیر کردم
خواستم طبق این کد برم اما بازم ارور گرفتم
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

مشکل بعدی که ممکنه برنامه کرش کنه ، close نکردن دیتابیس و cursor هست ، این دومی خیلی مهمه ، چون بعضی وقتا با اینکه دیتابیس رو می بندید ، اما بازم برنامه کرش میکنه ، راه حلی که پیدا کردم اینه که دیتابیس رو توی onPause و onDestroy قبل از super ببندید !!!

دوستان لطفا اگه راه حلی دارید ارائه بدید ، ممنون میشم واقعا

peymans
شنبه 19 بهمن 1392, 15:12 عصر
موضوع کرش عکس ها و رزولوشن اونها خیلی مهمه.
یه مثال ساده میزنم. اتفاقی که توی برنامه برای خودم هم پیش اومد. یک background ساده jpg 20kb با اندازه 800x1200 گذاشتم. توی بعضی موبایل ها جواب میداد. توی بعضی که اسکرین کوچیکی داشتند force close میداد. مشکل پر شدن memory داشت. نتیجه اینکه با چهار سایز مختلف عکس رو گذاشتم توی پوشه های drawable . حجم برنامه میره بالا. اما مطمئنی که جواب میده.

poorman
شنبه 19 بهمن 1392, 16:27 عصر
موضوع کرش عکس ها و رزولوشن اونها خیلی مهمه.
یه مثال ساده میزنم. اتفاقی که توی برنامه برای خودم هم پیش اومد. یک background ساده jpg 20kb با اندازه 800x1200 گذاشتم. توی بعضی موبایل ها جواب میداد. توی بعضی که اسکرین کوچیکی داشتند force close میداد. مشکل پر شدن memory داشت. نتیجه اینکه با چهار سایز مختلف عکس رو گذاشتم توی پوشه های drawable . حجم برنامه میره بالا. اما مطمئنی که جواب میده.

اینکه عکس ها رو توی اندازه های مختلف بذاریم توی drawable ها راه حل خوبیه ، اما به شرطی که این کار فقط برای عکس های بک گراند باشه
متاسفانه من توی خود برنامه عکس های بزرگی دارم که باید قابلیت زوم هم داشته باشن
و نمیشه از اندازشون کم کنم ، چون کیفیت میاد پایین ، همچنین تعدادشون کم نیست

poorman
شنبه 19 بهمن 1392, 19:15 عصر
من مشکلم رو حل کردم و اینجا یک توضیح کامل دادم برای سایر دوستان
http://barnamenevis.org/showthread.php?440701-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AD%D9%84-%D8%AE%D8%B7%D8%A7%DB%8C-Out-of-Memory-%D9%88-Force-Close-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%B9%DA%A9%D8%B3-%D9%87%D8%A7-(Bitmap)