Classes are executing randomly in testng.xml

Hi guys,
Breif: I have appium framework based on POM design patterns. I am unable to execute the testclasses as per what I have a requirement. Please do have a look on my implementation & suggest me some way to get out.

Problem: Second class is executing first instead of order which I have given.
Steps to reprdouce:
testng.xml-

<?xml version="1.0" encoding="UTF-8"?>
<listeners>
	<listener
		class-name="com.automation.listeners.TestAllureListener" />
</listeners>


<test name="Asus MAX Pro M1 Device" preserve-order="true">
	<!-- <parameter name="platformVersion" value="9.0" /> <parameter name="deviceName" 
		value="ASUS_X00TD" /> -->
	<parameter name="platformName" value="Android" />
	<parameter name="udid" value="J7AAGF009641EL4" />
	<parameter name="url" value="http://0.0.0.0:4723/wd/hub" />

	<classes>
		<class name="com.automation.tests.HomePageTest" />
		<class name="com.automation.tests.UserProfilePageTest" />
	</classes>
</test>

<!-- <test name="Asus MAX Pro M2 Device" preserve-order="true"> <parameter 
	name="platformVersion" value="9.0" /> <parameter name="deviceName" value="ASUS_X00TD" 
	/> <parameter name="platformName" value="Android" /> <parameter name="udid" 
	value="JCAAGF0497053XA" /> <parameter name="url" value="http://0.0.0.0:4724/wd/hub" 
	/> <classes> <class name="com.automation.tests.HomePageTest" /> </classes> 
	</test> -->

Actual: It executes first “UserProfilePageTest” class
Expected: Execution order must be -

  1. HomePageTest
  2. UserProfilePageTest

HomepageTest Class-
package com.automation.tests;

import java.net.MalformedURLException;

import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.After;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import com.automation.base.BaseClass;
import com.automation.listeners.TestAllureListener;
import com.automation.pages.HomePage;
import com.automation.util.TestUtil;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.qameta.allure.Description;
import io.qameta.allure.Severity;
import io.qameta.allure.SeverityLevel;

@Listeners({ TestAllureListener.class })
public class HomePageTest extends BaseClass {

HomePage homePage;

public HomePageTest() {
	super();
}

@BeforeMethod
@Parameters({ "platformName", "url" ,"udid"})
public void setUpHomePageClass(String platformName, String url, String udid) throws MalformedURLException {
	initialize_driver(platformName,url,udid);
	homePage = new HomePage(driver);
}

@Test(priority = 1, description = "Verify Top50 Txt on homepage test")
@Severity(SeverityLevel.NORMAL)
@Description("TestCase Description: Verify Top50 Txt on homepage")
public void verifyUsernameOnHomePageTest() throws Exception {
	TestUtil.waitForElementToBeClickable(By.id("continue_button"));
	homePage.clickContinueBtnAfterSplashScreen();
	log.info("***Executing verifyElementsOnHomeScreenTest***");
	log.info("waitForUserNameToBeClickable - username");
	TestUtil.waitForElementToBeClickable(By.id("user_name"));
	boolean flag = homePage.validateTop50Txt();
	Assert.assertTrue(flag);
	log.info("Top50Txt isDisplayed");
	log.info("verifyElementsonHomeScreenTest Ended");
}

/*
 * @Test(priority = 2, description = "Swipe to next video test")
 * 
 * @Severity(SeverityLevel.NORMAL)
 * 
 * @Description("TestCase Description: Swipe from one video to another") public
 * void swipeToNxtVideoTest() throws InterruptedException { try {
 * log.info("***Executing swipeToNxtVideoTest***");
 * log.info("waitForElementToPresenceOfElementLocated - username");
 * TestUtil.waitForElementToPresenceOfElementLocated(By.id("user_name"));
 * log.info("swipeverticalDown for nxt video"); TestUtil.swipeverticalDown();
 * log.info("getUserNamefromHomeScreen"); String userName =
 * homePage.getUserNamefromHomePage(); System.out.println("UserName:  " +
 * userName);
 * log.info("waitForElementToPresenceOfElementLocated - send_coin_text");
 * TestUtil.waitForElementToPresenceOfElementLocated(By.id("send_coin_text"));
 * log.info("swipeToNxtVideoTest Ended"); } catch (Exception e) {
 * e.printStackTrace(); log.error("Found Exception - swipeToNxtVideoTest"); } }
 */

/*
 * @Test(priority = 3, retryAnalyzer =
 * com.automation.listeners.RetryAnalyzer.class ) public void checkFailure() {
 * Assert.assertEquals(true, false); System.out.println("failed");
 * 
 * }
 */

@AfterMethod
public void tearDown() {
	driver.quit();
	/*
	 * // stop appium server appiumService.stop();
	 */
}

}

UserProfilePageTest Class:
public class UserProfilePageTest extends BaseClass {

UserProfilePage userProfilePage;
HomePage homePage;


public UserProfilePageTest() {
	super();
}

@BeforeMethod
@Parameters({"platformName","url","udid"})
public void setUpUserProfileClass(String platformName, String url, String udid) throws MalformedURLException {
	initialize_driver(platformName,url,udid);
	userProfilePage = new UserProfilePage(driver);
	homePage = new HomePage(driver);
}

@Test
public void validateUserNameOnProfilePageTest() {
	try {
		//homePage.clickContinueBtnAfterSplashScreen();
		log.info("*** Executing validateUserNameOnProfilePageTest***");
		log.info("waitForElementToBeClickable - user_name ");
		TestUtil.waitForElementToBeClickable(By.id("user_name"));
		log.info("getUserNamefromHomeScreen");
		String usernameOnHomeScreeen = homePage.getUserNamefromHomePage();
		userProfilePage = homePage.clickUserName();
		log.info("getUserNameOnUserProfile");
		String usernameOnProfile = userProfilePage.getUserNameOnUserProfile();
		Assert.assertEquals(usernameOnHomeScreeen, usernameOnProfile);
		log.info("Assertion passed - username");
		log.info("clickOnBackBtn");
		userProfilePage.clickOnBackBtn();
		boolean flag = userProfilePage.verifySendCoinsTxt();
		Assert.assertTrue(flag);
		log.info("Assertion Passed - SendCoinsTxt is displayed");
		log.info("validateuserNameOnProfilePageTest");
	} catch (Exception e) {
		e.printStackTrace();
		log.error("Found exception - validateUserNameOnProfilePageTest ");
	}
}

@AfterMethod
public void tearDown() {
	driver.quit();
	// stop appium server
	// appiumService.stop();
}

}

Description - In every test class, i have implemented before each testcase instantiate appium driver with following parameters then execution of test will happen & followed by quit the driver after each testcase