نمایش نتایج 1 تا 2 از 2

نام تاپیک: Multi-Threading in Android

  1. #1

    Multi-Threading in Android

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

    توضیح : در این برنامه از یک ProgressBar استفاده شده که از طریق ایجاد یک حلقه در Thread جداگانه، مقدارش بروز میشه. علاوه بر نخی که وظیفه اش بروز رسانی پوزیشن progressbar هست. یک نخ دیگه برای کنترل وظعیت نخ اول ایجاد کرده ایم که پراپرتی isAlive نخ اول رو مورد بررسی قرار میده و نتایج رو در Thread اصلی برنامه بر روی یک TextView به نمایش در میاره. همچنین برای همگام سازی و بروز رسانی GUI از handler ها و متد post استفاده کرده ایم.

    package m8.apps;

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ProgressBar;
    import android.widget.TextView;

    public class Main extends Activity {

    int i = 0;
    ProgressBar pr;
    TextView tv;
    TextView tv2;
    Button btn;
    Thread Tr;
    Thread checkerThread;
    boolean bln;

    private Handler handler = new Handler();
    private Handler handler2 = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //
    pr = (ProgressBar) findViewById(R.id.Pr1);
    tv = (TextView) findViewById(R.id.Tv1);
    tv2 = (TextView) findViewById(R.id.Tv2);
    btn = (Button) findViewById(R.id.Btn1);
    btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // Main Thread
    btn.setEnabled(false);
    Tr = new Thread(null, doProgressStart, "Background");
    Tr.start();
    // Checker Thread
    bln = true;
    checkerThread = new Thread(null, doCheck, "ChkThread");
    checkerThread.start();
    }
    });
    }

    // Main Thread Declarations
    private Runnable doProgressStart = new Runnable() {
    @Override
    public void run() {
    final int Mx = 1000;
    pr.setMax(Mx);
    for (i = 0; i < Mx; i++) {
    try {
    Thread.sleep(1);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    handler.post(doUpdateGUI);
    }
    }
    };
    private Runnable doUpdateGUI = new Runnable() {
    public void run() {
    pr.setProgress(i);
    tv.setText("Progress : " + i + "%");
    }
    };

    // --------------------------------------------
    // Checker Thread Declarations
    private Runnable doCheck = new Runnable() {
    @Override
    public void run() {
    while (bln) {
    try {
    Thread.sleep(100);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    handler2.post(doUpGUI2);
    }
    }
    };
    private Runnable doUpGUI2 = new Runnable() {
    @Override
    public void run() {
    if (Tr.isAlive()) {
    tv2.setText("Thread Status : Alive");
    } else {
    tv2.setText("Thread Status : Dead");
    bln = false;
    btn.setEnabled(true);
    }
    }
    };

    }

  2. #2

    نقل قول: Multi-Threading in Andoird

    خب تا جایی که متوجه شدم متغیر Bln که به عنوان یه flag برای خاتمه دادن به Thread دوم مورد بررسی قرار میگرفت باید به صورت Volatile تعریف بشه. اطلاعات بیشتر : http://en.wikipedia.org/wiki/Volatile_variable

تاپیک های مشابه

  1. چه طور multi thread کنم
    نوشته شده توسط mohammadjavad در بخش VB.NET
    پاسخ: 1
    آخرین پست: پنج شنبه 17 خرداد 1386, 12:24 عصر
  2. multi threading in vb
    نوشته شده توسط D32.00110 در بخش برنامه نویسی در 6 VB
    پاسخ: 5
    آخرین پست: چهارشنبه 11 بهمن 1385, 10:58 صبح
  3. multy threading in visual c
    نوشته شده توسط mahsa_22003 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 0
    آخرین پست: پنج شنبه 15 تیر 1385, 12:15 عصر
  4. multi threading
    نوشته شده توسط aki در بخش C#‎‎
    پاسخ: 4
    آخرین پست: چهارشنبه 03 خرداد 1385, 13:10 عصر
  5. Multi Thread programming
    نوشته شده توسط baboozadeh در بخش برنامه‌نویسی جاوا
    پاسخ: 5
    آخرین پست: دوشنبه 28 آذر 1384, 20:44 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •