Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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/3/android/183.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
Java 如何加速定期更新许多UI项的程序?_Java_Android - Fatal编程技术网

Java 如何加速定期更新许多UI项的程序?

Java 如何加速定期更新许多UI项的程序?,java,android,Java,Android,我创建了一个小应用程序,其中有一个产品列表,每个产品都有一个有效期。如果用户选择喜欢某个产品(showTimerPost),该产品的过期时间将增加,比如说5秒。我用一个处理程序尝试了一下,它确实起了作用,但我的应用程序开始运行得非常慢,可能是因为它每秒钟都在改变UI。我真的被这个问题困扰了一个月。我们将不胜感激 package com.blueflair.incre; import com.blueflair.incre.app.AppController; import com.bluef

我创建了一个小应用程序,其中有一个产品列表,每个产品都有一个有效期。如果用户选择喜欢某个产品(showTimerPost),该产品的过期时间将增加,比如说5秒。我用一个处理程序尝试了一下,它确实起了作用,但我的应用程序开始运行得非常慢,可能是因为它每秒钟都在改变UI。我真的被这个问题困扰了一个月。我们将不胜感激

package com.blueflair.incre;


import com.blueflair.incre.app.AppController;
import com.blueflair.incre.data.FeedItem;

import java.util.ArrayList;

import java.util.List;
import java.util.concurrent.TimeUnit;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;


public class FeedListAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    LocalUserData userLocalStore;
    long postExpiry;
    String timerFormat;
    private int defaultPostIncrementation = 900000;
    private List<FeedItem> feedItems;
    boolean favourite;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();
    private long timeDiff;
    private final List<ViewHolder> lstHolders;
    private int avatarSize;
    Handler handler = new Handler();
    private Runnable timerRunnable = new Runnable() {
        @Override
        public void run() {
            for (final ViewHolder holder : lstHolders) {
                holder.showTimerPost.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        long currentTime = System.currentTimeMillis();
                        currentTime--;
                        holder.showTimerPost.setText(String.valueOf(holder.updateTimeRemaining(currentTime)));
                        notifyDataSetChanged();
                    }
                }, 2000);
            }
        }
    };


    public FeedListAdapter(Activity activity, List<FeedItem> feedItems) {
        this.activity = activity;
        this.feedItems = feedItems;
        lstHolders = new ArrayList<>();
    }


    @Override
    public int getCount() {
        return feedItems.size();
    }

    @Override
    public Object getItem(int location) {
        return feedItems.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.feed_item, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();

        final FeedItem item = feedItems.get(position);
        holder = new ViewHolder();
        userLocalStore = new LocalUserData(activity);
        final User user = userLocalStore.getLoggedInUser();
        postExpiry = item.getPostExpiry();
        avatarSize = activity.getResources().getDimensionPixelSize(R.dimen.feed_avater_size);

        holder.name = (TextView) convertView.findViewById(R.id.userFeedName);
        holder.timestamp = (TextView) convertView
                .findViewById(R.id.timestamp);
        holder.statusMsg = (TextView) convertView
                .findViewById(R.id.txtStatusMsg);

        holder.profilePic = (ImageView) convertView
                .findViewById(R.id.profilePic);
        holder.profilePic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle args= new Bundle();
                args.putInt("userId", item.getUserId());
                Fragment profileViewFragment = new ProfileViewFragment();
                profileViewFragment.setArguments(args);
                FragmentTransaction ft = ((MainActivity)activity).getSupportFragmentManager().beginTransaction();
                ft.setCustomAnimations(R.anim.slide_in_done, R.anim.slide_out_send);
                ft.replace(R.id.container_body, profileViewFragment);
                ft.addToBackStack(null);
                ft.commit();
            }
        });
        holder.feedImageView = (FeedImageView) convertView
                .findViewById(R.id.feedImage1);

        String username = "@"+item.getUserName();
        holder.name.setText(username);

        convertView.setTag(holder);

        synchronized ( lstHolders) {
            lstHolders.add(holder);
        }
        // Converting timestamp into x ago format
        CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
                Long.parseLong(item.getTimeCreated()),
                System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);
        holder.timestamp.setText(timeAgo);
        holder.showTimerPost = (Button) convertView.findViewById(R.id.showPostTimer);
        handler.post(timerRunnable);
        holder.showTimerPost.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                item.setIncrementToExpiry(50000);
                notifyDataSetChanged();
            }
        });
        // Chcek for empty status message
        if (!TextUtils.isEmpty(item.getPostMessage())) {
            holder.statusMsg.setText(item.getPostMessage());
            holder.statusMsg.setVisibility(View.VISIBLE);
        } else {
            // status is empty, remove from view
            holder.statusMsg.setVisibility(View.GONE);
        }

        // Feed image
        if (item.getUserImage() != null) {
            holder.feedImageView.setImageUrl(item.getUserImage(), imageLoader);
            holder.feedImageView.setVisibility(View.VISIBLE);
            holder.feedImageView
                    .setResponseObserver(new FeedImageView.ResponseObserver() {
                        @Override
                        public void onError() {
                        }

                        @Override
                        public void onSuccess() {
                        }
                    });
        } else {
            holder.feedImageView.setVisibility(View.GONE);
        }
        //Setting the timer adapter for the post and their respective contents
        holder.setData(item);
        return convertView;
    }
    private class ViewHolder {
        FeedItem item;
        public TextView name;
        public TextView timestamp;
        public TextView statusMsg;
        public ImageView profilePic;
        public FeedImageView feedImageView;
        public Button showTimerPost;

        public void setData(FeedItem item) {
            this.item = item;
            updateTimeRemaining(System.currentTimeMillis());
        }

        public String updateTimeRemaining(long currentTime) {

            timeDiff = (item.getPostExpiry()+400000000) - currentTime;
            if (timeDiff > 0) {

                timerFormat = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(timeDiff),
                        TimeUnit.MILLISECONDS.toMinutes(timeDiff) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timeDiff)),
                        TimeUnit.MILLISECONDS.toSeconds(timeDiff) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(timeDiff)));

                showTimerPost.setText(timerFormat);
                return timerFormat;
            } else {
                //Delete feed items when post is expired
                showTimerPost.setText("Expired!");//only to explimify
            }
            return timerFormat;
        }

    }

}
package com.blueflair.incre;
导入com.blueflair.incre.app.AppController;
导入com.blueflair.incre.data.FeedItem;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.concurrent.TimeUnit;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.os.Handler;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentManager;
导入android.support.v4.app.FragmentTransaction;
导入android.text.TextUtils;
导入android.text.format.DateUtils;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.android.volley.toolbox.ImageLoader;
公共类FeedListAdapter扩展了BaseAdapter{
私人活动;
私人充气机;
LocalUserData userLocalStore;
过期时间长;
字符串时间格式;
私有int defaultPostIncrementation=900000;
私人物品清单;
布尔宠儿;
ImageLoader ImageLoader=AppController.getInstance().getImageLoader();
私人长时间差;
私人最终名单持有人;
私有化;
Handler=newhandler();
private Runnable timerRunnable=new Runnable(){
@凌驾
公开募捐{
用于(最终视图持有者:LST持有者){
holder.showTimerPost.postDelayed(新的Runnable(){
@凌驾
公开募捐{
长currentTime=System.currentTimeMillis();
当前时间--;
holder.showTimerPost.setText(String.valueOf(holder.updateTimeRemaining(currentTime));
notifyDataSetChanged();
}
}, 2000);
}
}
};
公共FeedListAdapter(活动,列出feedItems){
这个。活动=活动;
此项。feedItems=feedItems;
lstHolders=新的ArrayList();
}
@凌驾
public int getCount(){
返回feedItems.size();
}
@凌驾
公共对象getItem(int位置){
返回feedItems.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
如果(充气器==null)
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
if(convertView==null)
convertView=充气机。充气(R.layout.feed_项,空);
如果(imageLoader==null)
imageLoader=AppController.getInstance().getImageLoader();
最终饲料项目=饲料项目。获取(位置);
holder=新的ViewHolder();
userLocalStore=新的LocalUserData(活动);
最终用户=userLocalStore.getLoggedInUser();
postExpiry=item.getPostExpiry();
avatarSize=activity.getResources().getDimensionPixelSize(R.dimen.feed\u avater\u size);
holder.name=(TextView)convertView.findViewById(R.id.userFeedName);
holder.timestamp=(TextView)convertView
.findviewbyd(R.id.时间戳);
holder.statusMsg=(TextView)convertView
.findViewById(R.id.txtStatusMsg);
holder.profilePic=(ImageView)convertView
.findviewbyd(R.id.profilePic);
holder.profilePic.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Bundle args=新Bundle();
args.putInt(“userId”,item.getUserId());
Fragment profileViewFragment=新的profileViewFragment();
profileViewFragment.setArguments(args);
FragmentTransaction ft=((MainActivity)活动)。getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide\u in\u done,R.anim.slide\u out\u send);
ft.replace(R.id.container_-body,profileViewFragment);
ft.addToBackStack(空);
ft.commit();
}
});
holder.feedImageView=(feedImageView)convertView
.findViewById(R.id.feedImage1);
字符串username=“@”+item.getUserName();
holder.name.setText(用户名);
convertView.setTag(支架);
已同步(LST){
增加(持有人);
}
//将时间戳转换为x ago格式
CharSequence timeAgo=DateUtils.getRelativeTimeSpanString(
Long.parseLong(item.getTimeCreated()),
System.currentTimeMillis(),DateUtils.SECOND(单位:毫秒);
holder.timestamp.setText(timeAgo);
holder.showTimerPost=(按钮)convertView.findViewById(R.id.showtimer);
handler.post(timerRunnable);
holder.showTimerPost.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
项目。设置增加到支出(50000);
notifyDataSetChanged();
}
});
//空状态消息的Chcek
如果(!TextUtils.isEmpty(item.getPostMessage())){
holder.statusMsg.setText(item.getPostMessage());