آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در Thread.sleep ( حل شد ولی یه مشکل )

doost_fu  11 سال پیش  11 سال پیش
0 0

سلام

یه ارایه داینامیک دارم از ImageView که 8  تا عنصر داره یه کلاس از Thread هم ساختم که با یه نمونه از اون ، وارد اون کلاس میشم ، می خوام با این کد هر یک  ثانیه یکی از عناصر ارایه مخفی بشه ولی اینجوری عمل میکنه که مثلا چون 8 تا عنصر داریم 8 تا یک ثانیه صبر میکنه بعدش 8 تا عنصر با هم مخفی میشند ولی یه Log کنارش گذاشتم که داخل logcat درست ثانیه ثانیه میشمره !

  @Override
    public void run() {
        super.run();

        String result = edtIn.getText().toString();
        String myWord = word;
        if (result.length() > 0) {
           if (result.equals(myWord)) {

              G.HANDLER.post(new Runnable() {
                 @Override
                 public void run() {
                    for (int i=0 ; i<8 ; i++) {
                       images.get(i).setVisibility(View.INVISIBLE);
                       Log.i("LOG","Number : " + i);

                       try {
                       Thread.sleep(1000);
                       } catch (InterruptedException e) {
                       e.printStackTrace();
                       }
                    }
                 }
              });

           }
        }
    }

مشکل از کجاست ؟ ممنون

0 0
"در تیتر سئوال نه آنقدر طولانی بنویسید که چند خطی شود و نه آنقدر کوتاه که معنی را نرساند." (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
ATRAS  11 سال پیش
+2 0

کدتون رو اینجوری باید بنویسین.

     
@Override
public void run() {
super.run();

String result = edtIn.getText().toString();
String myWord = word;
if (result.length() > 0) {
if (result.equals(myWord)) {
for (int i=0 ; i<8 ; i++) {
G.HANDLER.post(new Runnable() {
@Override
public void run() {

images.get(i).setVisibility(View.INVISIBLE);
Log.i("LOG","Number : " + i);


}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}
}
0 0
دم شما گرم درست شد فقط یه مشکل کوچیک دیگه داخل کد شما پیش میاد اونم اینکه متغییر i دیگه داخل run شناخته نمیشه که اونم با یه فیلد حل شد ، کد تصحیح شده رو پایین میزارم اگه بعدا کسی مثل من همین مشکل داشت استفاده کنه ، بازم ممنون (11 سال پیش)
پاسخ به سوال 
doost_fu  11 سال پیش
+1 0

  @Override
    public void run() {
        super.run();

        String result = edtIn.getText().toString();
        String myWord = word;
        if (result.length() > 0) {
           if (result.equals(myWord)) {
               for (int i=0 ; i<8 ; i++) {
               num=i;
               G.HANDLER.post(new Runnable() {
                   @Override
                   public void run() {
                       images.get(num).setVisibility(View.INVISIBLE);
                       Log.i("LOG", "Number : " + num);
                   }
               });
                       try {
                       Thread.sleep(1000);
                       } catch (InterruptedException e) {
                       e.printStackTrace();
                       }
                   }
               }

        }
    }
پاسخ به سوال 
doost_fu  11 سال پیش
0 0

این کد همون کد بالاست که داخل برنامه نوشتم هفتاد تا ایمیج ویو داخل یه ارایه داینامیک هست و قراره یکی یکی INVISIBLE بشه !

با for نوشتم با while نوشتم ولی یه مشکلی داره

این کد  داخل جنی موشن و موبایل کار میکنه ولی داخل موبایل یه مشکلی پیش میاد بعضی مواقع به صورت تصادفی یک یا دو یا سه تا از تصاویر مخفی نمیشند !

ممکنه این مشکل به خاطر اصولی نبودن این کار من  پیش بیاد ؟

Thread thread = new Thread(new Runnable() {
@Override
public void run() {

  bb = 0
while ( bb < 70 ){
G.HANDLER.post(new Runnable() {
@Override
public void run() {
images.get(bb).setVisibility(View.INVISIBLE);
}
});
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
bb++;
}
});
thread.start();

با تشکر .

0 0
دوستان کسی نظری نداره ؟ هر کار کردم این مشکل بعضی مواقع توی گوشی پیش میاد ! (11 سال پیش)
+1 0
به دلیل پردازش دستورات تو گوشی این اتفاق پیش میاد و در بعضی مواقع که داده های در حال پردازش گوشی زیاده thread که در یک بازه زمانی به صورت فریم بندی داده هاشو نمایش میده چندتا فریم یک دفغه میپره و برای همون مشکلی که شما دارین پیش میاد. (11 سال پیش)
+1 0
ممنون از راهنمایی تون ، حالا راه حلش چیه ؟ thread حذف کنم ؟ (11 سال پیش)
+1 0
نه سعی کنید پروسس های اظافی رو جلوش رو بگیرین.مثلا تعداد thread هاتونو کمتر کنین.از متغیر های public که رم زیادی اشغال میکنه کمتر استفاده کنین و از این جور مساعل. (11 سال پیش)

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