Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Parse.com多个后台作业,性能问题_Android_Ios_Parse Platform - Fatal编程技术网

Android Parse.com多个后台作业,性能问题

Android Parse.com多个后台作业,性能问题,android,ios,parse-platform,Android,Ios,Parse Platform,我是杰克。我正在开发一个应用程序,我希望在iOS的collectionView和Android的grid view中显示一些项目。我希望显示商品的图像、名称、价格,然后显示卖家的配置文件图像、名称和上次登录 基本上每个单元有三个后台作业+一个云代码作业。查找项目图像、查找卖家、查找卖家配置文件图像,并检查当前用户是否喜欢该项目 在编写iOS应用程序时,代码运行正常。下面是我的cellForItemAtIndexPath方法 - (UICollectionViewCell *)collection

我是杰克。我正在开发一个应用程序,我希望在iOS的collectionView和Android的grid view中显示一些项目。我希望显示商品的图像、名称、价格,然后显示卖家的配置文件图像、名称和上次登录

基本上每个单元有三个后台作业+一个云代码作业。查找项目图像、查找卖家、查找卖家配置文件图像,并检查当前用户是否喜欢该项目

在编写iOS应用程序时,代码运行正常。下面是我的cellForItemAtIndexPath方法

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    //Initing an iKard
    itemCell *cell = (itemCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"itemCell" forIndexPath:indexPath];

    [cell.activityIndicator startAnimating];

    PFObject *item = [self.itemArray objectAtIndex:indexPath.row];

    cell.objectId = [item objectId];

    [cell.itemNameLabel setText:[item objectForKey:@"name"]];
    float priceInCent = [[item objectForKey:@"priceInCent"] floatValue];
    float price = priceInCent/100.0f;
    [cell.itemPriceLabel setText:[NSString stringWithFormat:@"$%.02f", price]];
    PFFile *imageFile = [item objectForKey:@"itemImage"];
    if (imageFile != nil) {
        [imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
            if (!error) {
                UIImage *image = [UIImage imageWithData:data];
                [cell.itemImageView setImage:image];
            } else {
                [self displayErrorMessage:error];
            }
        }];
    }

    [PFCloud callFunctionInBackground:@"userLikedItemWithId"
                       withParameters:@{@"objectId":[item objectId]}
                                block:^(NSNumber *liked, NSError *error) {
                                    if ([liked isEqualToNumber:[NSNumber numberWithInt:0]]) {
                                        [cell.likeButton setBackgroundImage:[UIImage imageNamed:@"like0"]
                                                                   forState:UIControlStateNormal];
                                    } else if ([liked isEqualToNumber:[NSNumber numberWithInt:1]]) {
                                        [cell.likeButton setBackgroundImage:[UIImage imageNamed:@"like1"]
                                                                   forState:UIControlStateNormal];
                                    }
                                }];



    PFUser *seller = [item objectForKey:@"owner"];
    [seller fetchInBackgroundWithBlock:^(PFObject *seller, NSError *error) {
        if (!error) {

            //Setting seller info
            //Name
            [cell.profileNameLabel setText: [seller objectForKey:@"displayName"]];

            //Last visit
            NSString *lastVisit = [NSString new];
            NSDate *updatedAt = seller.updatedAt;
            NSDate *now = [NSDate date];
            NSInteger differenceInDays = [self daysBetweenDate:updatedAt
                                                        andDate:now];
            if (differenceInDays == 0) {
                lastVisit = @"Today";
            } else {
                lastVisit = [NSString stringWithFormat:@"%ld days ago", (long)differenceInDays];
            }
            [cell.profileLastVisitLabel setText:lastVisit];

            //Profile image
            PFFile *imageFile = [seller objectForKey:@"profileImage"];
            if (imageFile != nil) {
                [imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                    if (!error) {
                        UIImage *image = [UIImage imageWithData:data];
                        [cell.profileImageView setImage:image];
                        [cell.activityIndicator stopAnimating];
                    } else {
                        [self displayErrorMessage:error];
                    }
                }];
            }
        } else {
            [self displayErrorMessage:error];
        }
    }];

    return cell;
}
然而,当我复制粘贴并将object-C翻译成Java时,事情开始变得一团糟。Android real设备下载文件所需的时间比在iOS real设备上运行要长得多。由于我有四个后台工作,所以即使下载和显示一个项目也需要很长时间。如果我开始滚动,单元格就会乱七八糟。 以下是gridView适配器中的getView方法

@Override
    public View getView(int position, View cell, ViewGroup viewGroup) {

        LayoutInflater inflater = ((Activity) this.mContext).getLayoutInflater();
        cell = inflater.inflate(R.layout.item_cell, viewGroup, false);

//        [cell.activityIndicator startAnimating];

ParseObject item = this.itemList.get(position);

//        cell.objectId = [item objectId];

        TextView itemNameTextView = (TextView) cell.findViewById(R.id.itemNameTextView);
        itemNameTextView.setText(item.getString("name"));

        float priceInCent = item.getLong("priceInCent");
        float price = priceInCent/100.0f;
        String P= "$" + Float.toString(price);
        TextView itemPriceTextView = (TextView) cell.findViewById(R.id.itemPriceTextView);
        itemPriceTextView.setText(P);

        final ImageView itemImageView = (ImageView) cell.findViewById(R.id.itemImageView);
        ParseFile imageFile = item.getParseFile("itemImage");
        imageFile.getDataInBackground(new GetDataCallback() {
          public void done(byte[] data, ParseException e) {
            if (e == null) {
              // data has the bytes for the resume
                Bitmap image = BitmapFactory.decodeByteArray(data,0,data.length);
                itemImageView.setImageBitmap(image);
            } else {
              // something went wrong
                displayErrorMessage(e);
            }
          }
        });

        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("objectId", item.getObjectId());
        ParseCloud.callFunctionInBackground("userLikedItemWithId", params, new FunctionCallback<Integer>() {
            @Override
            public void done(Integer liked, ParseException e) {
                if (e != null) {
                    displayErrorMessage(e);
                    return;
                }
                if (liked == 0) {

                } else if (liked == 1) {

                }
            }
        });


        final TextView profileNameTextView = (TextView) cell.findViewById(R.id.profileNameTextView);
        final TextView profileLastVisitTextView = (TextView) cell.findViewById(R.id.profileLastVisitTextView);
        final ImageView profileImageView = (ImageView) cell.findViewById(R.id.profileImageView);

        ParseUser seller = item.getParseUser("owner");
        seller.fetchInBackground(new GetCallback<ParseObject>() {
              public void done(ParseObject seller, ParseException e) {
                if (e == null) {
                    //Setting seller info
                    //Name
                    profileNameTextView.setText(seller.getString("displayName"));
                    //Last visit
                    Date lastVisit = seller.getUpdatedAt();
                    Date now = new Date();
                    long diff = now.getTime() - lastVisit.getTime();
                    int diffInDays = (int) (diff / (1000 * 60 * 60 * 24));
                    String lastVisited= Float.toString(diffInDays);
                    profileLastVisitTextView.setText(lastVisited);

                    if (diffInDays == 0) {
                        profileLastVisitTextView.setText("Today");
                    } else {
                        profileLastVisitTextView.setText(lastVisited + "days ago");
                    }


                    //Profile image
                    ParseFile imageFile = seller.getParseFile("profileImage");
                    imageFile.getDataInBackground(new GetDataCallback() {
                      public void done(byte[] data, ParseException e) {
                        if (e == null) {
                          // data has the bytes for the resume
                            Bitmap image = BitmapFactory.decodeByteArray(data,0,data.length);
                            profileImageView.setImageBitmap(image);
                        } else {
                          // something went wrong
                            displayErrorMessage(e);
                        }
                      }
                    });
                } else {
                    displayErrorMessage(e);
                }
              }
            });

        return cell;
    }
@覆盖
公共视图getView(int位置、视图单元格、视图组视图组){
LayoutFlater充气器=((活动)this.mContext.getLayoutFlater();
单元格=充气器。充气(R.layout.item_单元格,视图组,false);
//[cell.activityIndicator startAnimating];
ParseObject item=this.itemList.get(位置);
//cell.objectId=[item objectId];
TextView itemNameTextView=(TextView)cell.findViewById(R.id.itemNameTextView);
itemNameTextView.setText(item.getString(“名称”));
浮动价格激励=item.getLong(“价格激励”);
浮动价格=价格激励/100.0f;
字符串P=“$”+Float.toString(价格);
TextView itemPriceTextView=(TextView)cell.findViewById(R.id.itemPriceTextView);
itemPriceTextView.setText(P);
final ImageView itemImageView=(ImageView)cell.findViewById(R.id.itemImageView);
ParseFile imageFile=item.getParseFile(“itemImage”);
getDataInBackground(新的GetDataCallback(){
公共无效完成(字节[]数据,解析异常e){
如果(e==null){
//数据包含用于恢复的字节数
位图图像=位图工厂.decodeByteArray(数据,0,数据.length);
itemImageView.setImageBitmap(图像);
}否则{
//出了点问题
显示错误信息(e);
}
}
});
HashMap params=新的HashMap();
参数put(“objectId”,item.getObjectId());
ParseCloud.callFunctionInBackground(“userLikedItemWithId”,参数,新函数callback(){
@凌驾
public void done(类似整数,parsee异常){
如果(e!=null){
显示错误信息(e);
回来
}
if(liked==0){
}else if(liked==1){
}
}
});
final TextView profileNameTextView=(TextView)cell.findViewById(R.id.profileNameTextView);
最终文本视图配置文件LastVisiteTextView=(文本视图)cell.findViewById(R.id.profileLastVisiteTextView);
final ImageView profileImageView=(ImageView)cell.findViewById(R.id.profileImageView);
ParseUser seller=item.getParseUser(“所有者”);
seller.fetchInBackground(新的GetCallback(){
公共无效完成(ParseObject卖家,Parsee异常){
如果(e==null){
//设置卖家信息
//名字
profileNameTextView.setText(seller.getString(“displayName”));
//最后一次访问
Date lastVisite=seller.getUpdatedAt();
现在日期=新日期();
long diff=now.getTime()-lastVisit.getTime();
int diffInDays=(int)(diff/(1000*60*60*24));
字符串lastVisited=Float.toString(diffInDays);
profilelastVisiteTextView.setText(lastVisited);
如果(diffInDays==0){
profilelastVisiteTextView.setText(“今天”);
}否则{
profilelastVisiteTextView.setText(lastVisited+“几天前”);
}
//轮廓图像
ParseFile imageFile=seller.getParseFile(“profileImage”);
getDataInBackground(新的GetDataCallback(){
公共无效完成(字节[]数据,解析异常e){
如果(e==null){
//数据包含用于恢复的字节数
位图图像=位图工厂.decodeByteArray(数据,0,数据.length);
profileImageView.setImageBitmap(图像);
}否则{
//出了点问题
显示错误信息(e);
}
}
});
}否则{
显示错误信息(e);
}
}
});
返回单元;
}
而且情况变得更糟,因为Android倾向于为一个手机多次调用getView。在我滚动一段时间后,由于太多的后台工作,应用程序崩溃了

我的问题是,, 首先,这种差异是由Android real设备和iOS real设备的性能差异造成的吗?(这是一款全新的安卓系统,2g内存,4核,是为未来而购买的,而不是2年前的iPhone4S) 第二,如果上面所说的是正确的,我有没有办法提高性能?我的编码正确吗?
非常感谢您抽出时间

我找到了答案。由于内存问题,应用程序崩溃。我正在将许多图像加载到gridView中。 我找到了一些方法来克服这个问题。基本上需要两个步骤。 首先,启动一个进程对话框,下载数据