Это код приложения в стадии разработки. Тема: пользователь выбирает максимум 50 изображений, затем отображает эти изображения в разных макетах. Эти макеты могут состоять в том, что один макет состоит из 6 изображений ... вторых 5 ... так что 50 изображений будут показаны в разных макетах. Проблема в том, что когда-либо служба выполняется. Иногда он плавно работает и возвращает информацию о макете. Иногда система просто приостанавливает текущее выполнение работающей службы, и результат не возвращается. Я использовал Intent Service для обработки информации в рабочем потоке, но иногда информация обрабатывается, иногда система просто пропускает текущую обработку службы.
MainActivity. java
<code>
onActivityResult()
{
//...
//..
//..
//..
//..
//MasterImageList is basically the retrieved images with their local path as string
val myService = Intent(this,LayoutsProcessing::class.java)
myService.putExtra("masterImageList",masterImageList)
startService(myService)
}
override fun onResume() {
super.onResume()
Log.d("MyTag","On Resume")
LocalBroadcastManager.getInstance(applicationContext).registerReceiver(mReceiver,
IntentFilter(LAYOUTS_PROCESSING_RESULT)
)
}
override fun onPause() {
super.onPause()
Log.d("MyTag","On Pause")
LocalBroadcastManager.getInstance(applicationContext).unregisterReceiver(mReceiver)
}
<code>
// Receiver
private var mReceiver = object : BroadcastReceiver() {
override fun onReceive(contxt: Context?, intent: Intent?) {
if(intent!=null) {
if(intent.hasExtra("map")){
val result:HashMap> =
intent.getSerializableExtra("map") as HashMap>;
val multiCollageIntent = Intent(applicationContext, DisplayAlbumCollage::class.java)
multiCollageIntent.putExtra("map", result)
val myService = Intent(applicationContext,LayoutsProcessing::class.java)
multiCollageIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
stopService(myService)
startActivity(multiCollageIntent)
finish()
}
else{
Toast.makeText(applicationContext,"I am g=hit",Toast.LENGTH_SHORT).show()
}
}
}
}
</code>
LayoutsProcessing. java
public class LayoutsProcessing extends IntentService {
private static final String TAG = "MyTag";
public static final String LAYOUTS_PROCESSING_RESULT = "LayoutsProcessingResult";
private String[] masterImageList;
int totalImageSize;
HashMap> result = new HashMap();
public LayoutsProcessing() {
super("LayoutsProcessing");
setIntentRedelivery(true);
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate: ");
super.onCreate();
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
if(intent!=null) {
masterImageList = intent.getStringArrayExtra("masterImageList");
totalImageSize = masterImageList.length;
}
}
private void sendResultToUI(HashMap> result) {
Intent intent = new Intent(LAYOUTS_PROCESSING_RESULT);
intent.putExtra("map",result);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy: ");
super.onDestroy();
}
private HashMap> makeCollageMapForViewPager(ArrayList pageNumberSize) {
HashMap> collageMap = new HashMap>();
int startIndex = 0;
int i = 0;
try {
for(Integer pageSize: pageNumberSize ) {
int getTotalCollageImages = pageSize;
int end = startIndex + getTotalCollageImages;
int arraySize = end - startIndex;
ArrayList images = new ArrayList(arraySize);
for (int k=startIndex; k> generateRandomLayouts(int totalImageListSize)
{
ArrayList pageNumberSize = new ArrayList();
int remainingImagesSize= totalImageListSize;
int randomNumber;
Random r = new Random();
randomNumber = r.nextInt(7 - 2) + 2;
int totalNumberOfPages = 0;
while (remainingImagesSize != 0) {
if (randomNumber > remainingImagesSize) {
randomNumber = r.nextInt(7 - 2) + 2;
} else {
remainingImagesSize -= randomNumber;
Log.d("MyTag Page Number", String.valueOf(totalNumberOfPages));
pageNumberSize.add(randomNumber);
totalNumberOfPages++;
randomNumber = r.nextInt(7 - 2) + 2;
}
}
return makeCollageMapForViewPager(pageNumberSize);
}
}
</code>