رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
استفاده از AsyncTask در SplashScreen (حل شد)
#1
با سلام،

با توجه به این که از Splash Screen برای آماده سازی برنامه استفاده میشه گذاشتن Timer به نظر من کار اشتباهیست مگر اینکه فقط بخواهید برند و لوگو خودتون رو نشان بدهید و چند ثانیه وقت کاربر رو بگیرید که برخلاف اصول UX هست و کاربر بعد از مدتی از این اتلاف وقت خسته میشه

حالا سوال اینجاست :

اگر بخواهیم برای آماده سازی برنامه از AsyncTask استفاده کنیم توی doInBackground کار های آماده سازی رو انجام بدیم و در onPostExecute کاربر رو با Intent به صفحه اصلی برنامه ببریم از لحاظ کد نویسی (Poor Coding) حساب میشه؟

من با این روش میخواستم سرویس پوشه (Pushe.co) رو Initialize کنم که برنامه کرش کرد و توی لاگ کت هم هیچی ننوشت

راهی برای این که هم برنامه رو آماده سازی کنیم هم از آماده سازی برنامه مطمئن بشیم و هم به محض آماده شدن به صفحه اصلی بریم؟

کد پیوست شد


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#2
روش بدی نیست. البته بنظرم بهتره یه ProgressBar هم نمایش بدین که کاربر احساس کنه یه کاری داره انجام میشه. مثلاً تا 99% بصورت عادی و با کمک یه Thread پر بشه و وقتی جواب اومد، توی onPostExecute یکمرتبه 100% بشه و بعد اکتیویتی Splash رو finish کنید و اکتیویتی اصلی رو نشون بدین.
پاسخ
تشکر شده توسط:
#3
من خودم از این روش برای اماده سازی و گرفتن اطلاعات اولیه برنامه استفاده کردم.
حتی از پوشه هم استفاده کردم توی صفحه اسپلش اسکرین.
هیچ مشکلی نداشتم تا حالا
فکر کنم شما مشکلتون توی دادن کانکست به اینتنت هستش.
یه کلاس بسازید و کلاستون رو توی ماین فست به اپلیکیشن بدید.
توی کلاس یه کانکست تعریف کنید و همیشه از اون استفاده کنید برای مثال:
        Pushe.initialize(app.context,true);
البته برای پوشه نیازی به اسینتکس نیست ولی اینطوری که گفتم همیشه میتونی از این کانکست استفاده کنی
و حالا اگه نیازی به اکتویتی داشتی این کار رو بکن:
اول توی همون کلاسی که ساختی یه اکتویتی تعریف کن.
حالا بیا یا کلاس دیگه بساز و کلاسی که ساختی رو از اکتویتی و یا هر چیز دیگه ای مشتق بگیر:
public class ActivityEnhanced extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        App.currentActivity = this;

    }

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        App.currentActivity = this;
    }

    @Override
    protected void onResume() {
        super.onResume();
        App.currentActivity = this;
    }
}
حالا همه اکتویتی هات رو از این کلاس جدید مشتق کن
و این طوری به اکتویتی جاری دسترسی داری:
class.currentActivity
پاسخ
تشکر شده توسط: DIGICUBES Mobile
#4
درواقع به این روش، Global Application Class میگن که به شما اجازه میده یه سطح کنترلی بالاتر از اکتیویتی‌ها داشته باشین و موارد مشترک رو اونجا نگه دارین:
public class App extends Application {
    // public static fields here
    @Override
    public void onCreate() {
        // code to run at application launch time
    }
}

نحوه معرفی در مانیفست:
<application
    name=".App"
    ...

و در برنامه میتونید با روشی مشابه کد زیر بهشون دسترسی پیدا کنید:
App.currentActivity

این تکنیک رو توی پکیج مقدماتی اندروید توضیح دادم.
پاسخ
تشکر شده توسط: balutsoft




کاربران در حال بازدید این موضوع: 1 مهمان