Android:更新期间应用程序小部件显示奇怪的图像

Android:更新期间应用程序小部件显示奇怪的图像,android,service,android-appwidget,Android,Service,Android Appwidget,复活节快乐 并提前非常感谢您的帮助 我有一个应用程序小部件,每1分钟通过服务更新一次 该服务需要几秒钟来更新小部件,因为它从互联网收集数据 问题是,在更新期间,应用程序小部件本身被完全不同的图像替换了几秒钟(请参见下面的图像),然后它返回到正常状态 这是小部件的正常外观: 这就是更新过程中发生的情况 几秒钟后一切又恢复正常: 请就如何避免这种情况提出任何建议,非常欢迎 我曾试图像有人在这篇文章中所做的那样自行停止服务: 但是没有成功 这是更新应用程序小部件的服务的全部代码(我怀疑它会有多大

复活节快乐

并提前非常感谢您的帮助

我有一个应用程序小部件,每1分钟通过服务更新一次

该服务需要几秒钟来更新小部件,因为它从互联网收集数据

问题是,在更新期间,应用程序小部件本身被完全不同的图像替换了几秒钟(请参见下面的图像),然后它返回到正常状态

这是小部件的正常外观:

这就是更新过程中发生的情况

几秒钟后一切又恢复正常:

请就如何避免这种情况提出任何建议,非常欢迎

我曾试图像有人在这篇文章中所做的那样自行停止服务:

但是没有成功

这是更新应用程序小部件的服务的全部代码(我怀疑它会有多大帮助)

公共类更新服务扩展服务{
公共远程视图更新视图;
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
Log.e(“,”onStartCommand di-AppWidget”);
int[]appWidgetIds=intent.getIntArrayExtra(“widgetsids”);
final int N=appWidgetIds.length;
AppWidgetManager=AppWidgetManager.getInstance(此);
//对所属的每个应用程序小部件执行此循环过程
//此提供商
对于(int i=0;i=1){
字符串nome=list.get(0.getName();
如果(名称长度()>=12)
nome=nome.子串(0,12);
setTextViewText(R.id.name1,nome);
Log.e(“list.get(1.getName()”,list.get(0.getName());
UpdateTaskPrice up=新的UpdateTaskPrice();
执行(list.get(0.getSymbol(),null,null);
字符串res=“”;
试一试{
res=up.get();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(执行例外){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.e(“risultato di getè”,res);
setextviewtext(R.id.price1,res);
UpdateTaskChange chn=新的UpdateTaskChange();
chn.execute(list.get(0.getSymbol(),null,null);
字符串reschn=“”;
试一试{
reschn=chn.get();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(执行例外){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.e(“risultato di getè”,reschn);
updateViews.setTextViewText(R.id.change1,reschn+“%”);
if(浮点值of(reschn)<0){
updateViews.setTextViewText(R.id.arrow1,“\u25BC”);
setextcolor(R.id.change1,Color.RED);
setextcolor(R.id.arrow1,Color.RED);
}
如果(浮点值of(reschn)>0){
updateViews.setTextViewText(R.id.arrow1,“\u25B2”);
setextcolor(R.id.change1,Color.GREEN);
setextcolor(R.id.arrow1,Color.GREEN);
}
}
Log.e(“,“aggiornamento首席财务官”);
//第二
如果(list.size()>=2){
字符串nome=list.get(1.getName();
如果(名称长度()>=12)
nome=nome.子串(0,12);
setExtViewText(R.id.name2,nome);
UpdateTaskPrice up=新的UpdateTaskPrice();
执行(list.get(1.getSymbol(),null,null);
字符串res=“”;
试一试{
res=up.get();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(执行例外){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.e(“risultato di getè”,res);
setextviewtext(R.id.price2,res);
UpdateTaskChange chn=新的UpdateTaskChange();
chn.execute(list.get(1.getSymbol(),null,null);
字符串reschn=“”;
试一试{
reschn=chn.get();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(执行例外){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.e(“risultato di getè”,re
public class UpdateService extends Service {

public RemoteViews updateViews;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.e("", "onStartCommand di AppWidget");
    int[] appWidgetIds = intent.getIntArrayExtra("widgetsids");
    final int N = appWidgetIds.length;
    AppWidgetManager manager = AppWidgetManager.getInstance(this);

    // Perform this loop procedure for each App Widget that belongs to
    // this provider

    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];
        Log.e("", "i=" + Integer.toString(i) + " di " + Integer.toString(N));
        RemoteViews view = buildUpdate(getApplicationContext(),
                appWidgetIds);

        // Tell the AppWidgetManager to perform an update on the current
        // app widget
        manager.updateAppWidget(appWidgetId, view);

    }
    stopSelf();
    Log.e("","stoopo il service");
    return (START_STICKY);


}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

private RemoteViews buildUpdate(Context ctxt, int[] appWidgetIds) {
    updateViews = new RemoteViews(ctxt.getPackageName(), R.layout.widget);
    Log.e("", "invoco buildbpdate");
    Intent intent = new Intent(ctxt, AppWidgetConfigure.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(ctxt, 0,
            intent, 0);
    updateViews.setOnClickPendingIntent(R.id.Widgetbackground,
            pendingIntent);

    DatabaseHandler db = new DatabaseHandler(getApplicationContext());

    ArrayList<Stock> list = db.getAllStocks();
    if (!list.isEmpty())
        Collections.sort(list, new Comparator<Stock>() {
            public int compare(Stock s1, Stock s2) {
                return s1.getName().compareToIgnoreCase(s2.getName());
            }
        });
    Log.e("", "inizio ad aggiornare");
    // PRIMO
    if (list.size() >= 1) {
        String nome = list.get(0).getName();
        if (nome.length() >= 12)
            nome = nome.substring(0, 12);
        updateViews.setTextViewText(R.id.name1, nome);
        Log.e("list.get(1).getName()", list.get(0).getName());

        UpdateTaskPrice up = new UpdateTaskPrice();
        up.execute(list.get(0).getSymbol(), null, null);
        String res = "";
        try {
            res = up.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", res);
        updateViews.setTextViewText(R.id.price1, res);

        UpdateTaskChange chn = new UpdateTaskChange();
        chn.execute(list.get(0).getSymbol(), null, null);
        String reschn = "";
        try {
            reschn = chn.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", reschn);
        updateViews.setTextViewText(R.id.change1, reschn+"%");
        if (Float.valueOf(reschn) < 0) {
            updateViews.setTextViewText(R.id.arrow1, "\u25BC");
            updateViews.setTextColor(R.id.change1, Color.RED);
            updateViews.setTextColor(R.id.arrow1, Color.RED);
        }
        if (Float.valueOf(reschn) > 0) {
            updateViews.setTextViewText(R.id.arrow1, "\u25B2");
            updateViews.setTextColor(R.id.change1, Color.GREEN);
            updateViews.setTextColor(R.id.arrow1, Color.GREEN);
        }
    }
    Log.e("", "faccio primo giro di aggiornamento");
    // SECONDO
    if (list.size() >= 2) {
        String nome = list.get(1).getName();
        if (nome.length() >= 12)
            nome = nome.substring(0, 12);
        updateViews.setTextViewText(R.id.name2, nome);

        UpdateTaskPrice up = new UpdateTaskPrice();
        up.execute(list.get(1).getSymbol(), null, null);
        String res = "";
        try {
            res = up.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", res);
        updateViews.setTextViewText(R.id.price2, res);

        UpdateTaskChange chn = new UpdateTaskChange();
        chn.execute(list.get(1).getSymbol(), null, null);
        String reschn = "";
        try {
            reschn = chn.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", reschn);
        updateViews.setTextViewText(R.id.change2, reschn+"%");
        if (Float.valueOf(reschn) < 0) {
            updateViews.setTextViewText(R.id.arrow2, "\u25BC");
            updateViews.setTextColor(R.id.change2, Color.RED);
            updateViews.setTextColor(R.id.arrow2, Color.RED);
        }
        if (Float.valueOf(reschn) > 0) {
            updateViews.setTextViewText(R.id.arrow2, "\u25B2");
            updateViews.setTextColor(R.id.change2, Color.GREEN);
            updateViews.setTextColor(R.id.arrow2, Color.GREEN);
        }
    }

    // TERZO
    if (list.size() >= 3) {
        String nome = list.get(2).getName();
        if (nome.length() >= 12)
            nome = nome.substring(0, 12);
        updateViews.setTextViewText(R.id.name3, nome);

        UpdateTaskPrice up = new UpdateTaskPrice();
        up.execute(list.get(2).getSymbol(), null, null);
        String res = "";
        try {
            res = up.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", res);
        updateViews.setTextViewText(R.id.price3, res);

        UpdateTaskChange chn = new UpdateTaskChange();
        chn.execute(list.get(2).getSymbol(), null, null);
        String reschn = "";
        try {
            reschn = chn.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", reschn);
        updateViews.setTextViewText(R.id.change3, reschn+"%");
        if (Float.valueOf(reschn) < 0) {
            updateViews.setTextViewText(R.id.arrow3, "\u25BC");
            updateViews.setTextColor(R.id.change3, Color.RED);
            updateViews.setTextColor(R.id.arrow3, Color.RED);
        }
        if (Float.valueOf(reschn) > 0) {
            updateViews.setTextViewText(R.id.arrow3, "\u25B2");
            updateViews.setTextColor(R.id.change3, Color.GREEN);
            updateViews.setTextColor(R.id.arrow3, Color.GREEN);
        }
    }
    // QUARTO
    if (list.size() >= 4) {
        String nome = list.get(3).getName();
        if (nome.length() >= 12)
            nome = nome.substring(0, 12);
        updateViews.setTextViewText(R.id.name4, nome);

        UpdateTaskPrice up = new UpdateTaskPrice();
        up.execute(list.get(3).getSymbol(), null, null);
        String res = "";
        try {
            res = up.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", res);
        updateViews.setTextViewText(R.id.price4, res);

        UpdateTaskChange chn = new UpdateTaskChange();
        chn.execute(list.get(3).getSymbol(), null, null);
        String reschn = "";
        try {
            reschn = chn.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", reschn);
        updateViews.setTextViewText(R.id.change4, reschn+"%");
        if (Float.valueOf(reschn) < 0) {
            updateViews.setTextViewText(R.id.arrow4, "\u25BC");
            updateViews.setTextColor(R.id.change4, Color.RED);
            updateViews.setTextColor(R.id.arrow4, Color.RED);
        }
        if (Float.valueOf(reschn) > 0) {
            updateViews.setTextViewText(R.id.arrow4, "\u25B2");
            updateViews.setTextColor(R.id.change4, Color.GREEN);
            updateViews.setTextColor(R.id.arrow4, Color.GREEN);
        }
    }
    // QUINTO
    if (list.size() >= 5) {
        String nome = list.get(4).getName();
        if (nome.length() >= 12)
            nome = nome.substring(0, 12);
        updateViews.setTextViewText(R.id.name5, nome);

        UpdateTaskPrice up = new UpdateTaskPrice();
        up.execute(list.get(4).getSymbol(), null, null);
        String res = "";
        try {
            res = up.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", res);
        updateViews.setTextViewText(R.id.price5, res);

        UpdateTaskChange chn = new UpdateTaskChange();
        chn.execute(list.get(4).getSymbol(), null, null);
        String reschn = "";
        try {
            reschn = chn.get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("risultato di get è ", reschn);
        updateViews.setTextViewText(R.id.change5, reschn+"%");
        if (Float.valueOf(reschn) < 0) {
            updateViews.setTextViewText(R.id.arrow5, "\u25BC");
            updateViews.setTextColor(R.id.change5, Color.RED);
            updateViews.setTextColor(R.id.arrow5, Color.RED);
        }
        if (Float.valueOf(reschn) > 0) {
            updateViews.setTextViewText(R.id.arrow5, "\u25B2");
            updateViews.setTextColor(R.id.change5, Color.GREEN);
            updateViews.setTextColor(R.id.arrow5, Color.GREEN);
        }
    }
    return (updateViews);
}

public class UpdateTaskPrice extends AsyncTask<String, String, String> {
    public String res;

    @Override
    protected void onProgressUpdate(String... progress) {
    }

    @Override
    protected void onPostExecute(String result) {
    }

    @Override
    protected String doInBackground(String... symbol) {
        Log.e("", "Passo per doinbabground");
        String result = "";
        DefaultHttpClient client = new DefaultHttpClient();
        String srt = "";
        String url = getApplicationContext().getString(
                R.string.urlaternativo).concat(symbol[0]);
        HttpGet getMethod = new HttpGet(url);
        try {
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            srt = client.execute(getMethod, responseHandler);
            int inizio = srt.indexOf("<last data=\"");
            int fine = srt.indexOf("\"/>", inizio + 12);
            result = srt.substring(inizio + 12, fine);

        } catch (Throwable t) {
            // Log.e("ERROR", "ERROR", t);
        }
        Log.e("", "finisco per doinbabground");
        return result;
    }
}

public class UpdateTaskChange extends AsyncTask<String, String, String> {
    public String res;

    @Override
    protected void onProgressUpdate(String... progress) {
    }

    @Override
    protected void onPostExecute(String result) {
    }

    @Override
    protected String doInBackground(String... symbol) {
        Log.e("", "Passo per doinbabground");
        String result = "";
        DefaultHttpClient client = new DefaultHttpClient();
        String srt = "";
        String url = getApplicationContext().getString(
                R.string.urlaternativo).concat(symbol[0]);
        HttpGet getMethod = new HttpGet(url);
        try {
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            srt = client.execute(getMethod, responseHandler);

            int inizio = srt.indexOf("<perc_change data=\"");
            int fine = srt.indexOf("\"/>", inizio + 19);
            result = srt.substring(inizio + 19, fine);

        } catch (Throwable t) {
            // Log.e("ERROR", "ERROR", t);
        }
        Log.e("", "finisco per doinbabground");
        return result;
    }
}

 }