CodeShot

Activity در مقابل Fragment

Activity یک صفحه یا نقطه ورود مستقل با چرخه‌حیات خاص خودش در سیستم‌عامل اندروید است که معمولاً کل صفحه را پوشش می‌دهد؛ Fragment یک بخش قابل‌استفاده‌مجدد از UI و رفتار است که باید همیشه درون یک Activity (یا Fragment دیگر) میزبانی شود و چرخه‌حیات آن به میزبانش وابسته است.

ویژگیActivityFragment
استقلالمستقل و ثبت‌شده در Manifestوابسته به یک Activity میزبان
چرخه‌حیاتمستقلوابسته به چرخه‌حیات میزبان
قابلیت استفاده مجددکمبالا (در چند صفحه/layout)
کاربرد رایج امروزینقطه ورود اصلی اپ (تک یا چند عدد)واحد ساخت UI درون معماری Single-Activity

کِی از Activity استفاده کنیم؟

برای تعریف یک صفحه یا نقطه ورود مستقل جدید در اپلیکیشن (مثلاً صفحه ورود، صفحه اصلی) که باید در Manifest ثبت شود، از Activity استفاده کنید.

کِی از Fragment استفاده کنیم؟

برای ساخت رابط کاربری قابل‌استفاده‌مجدد در چند صفحه، پیاده‌سازی layout های واکنش‌گرا (مثل master-detail در تبلت) یا کار با Navigation Component بین چند تب، از Fragment استفاده کنید.

مثال Activity

class LoginActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
    }
}

مثال Fragment

class ProfileFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View = inflater.inflate(R.layout.fragment_profile, container, false)
}

اشتباه رایج

امروزه ساخت اپلیکیشن‌های تک-Activity با چندین Fragment (Single-Activity Architecture) استاندارد است، اما توسعه‌دهندگان تازه‌کار هنوز برای هر صفحه یک Activity جدید می‌سازند که مدیریت navigation و اشتراک state بین صفحات را دشوارتر و پرهزینه‌تر می‌کند.

جمع‌بندی

امروزه معمولاً یک Activity میزبان و چند Fragment برای صفحات داخلی — نه یک Activity به ازای هر صفحه.