场景
产品需要一个全屏广播,不管用户在那个界面每隔一段时间都会弹出一个滚动的文字,而且这个不是用推送来做的,后台返回一组数据,然后客户端自己进行处理!如果有更好的方法或者建议都可以跟我说一下,万分感谢,第一次做这个也不知道用什么合适!
Service实现
import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.view.WindowManager; import android.widget.LinearLayout; import com.yudaowawa.ydww.bean.GetDollInvoicesResult; import com.yudaowawa.ydww.util.OtherUtils; import java.util.ArrayList; import weking.lib.utils.LogUtils; import weking.lib.utils.MyToast; /** * 中奖轮播 */ public class WinningCarouselService extends Service { private static int time=1*5; public static Thread thread; public static void setTime(int te) { time = te; } private static ArrayList<GetDollInvoicesResult.ItemsBean> mDatas; private WindowManager.LayoutParams mParams; private Context context; private int height; private LinearLayout ll; public WinningCarouselService(){ } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); context=this; thread = new Thread(new Tick()); thread.start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } class Tick implements Runnable { public void run() { try { while(time > -1) { Thread.sleep(1000); time--; if(time<=0) { if(mDatas!=null){ int size = mDatas.size(); if(size>0) { if(OtherUtils.isAppOnForeground()) { int pos = size-1; MyToast.showMyToast(String.valueOf(mDatas.get(pos).getNickname()+"抓中了娃娃"),mDatas.get(pos).getHeadPic()); LogUtils.e("WinningCarouselService number"+mDatas.get(pos)); mDatas.remove(pos); } } } time=1*5; } LogUtils.e("WinningCarouselService time"+time); } } catch (Exception e) { e.printStackTrace(); LogUtils.e("WinningCarouselService InterruptedException"); } } } public static void stop() { if (thread != null) { thread.interrupt(); thread = null; } } public static void setDatas(GetDollInvoicesResult result) { mDatas= (ArrayList<GetDollInvoicesResult.ItemsBean>) result.getItems(); } }
在Service修改UI界面
public static void showMyToast(final String str, final String headUrl) { if (!OtherUtils.isAppOnForeground()) { return; } try { App.getAppContext().getCurrentActivity().runOnUiThread(new Runnable() { @Override public void run() { LayoutInflater inflater = LayoutInflater.from(App.getAppContext()); adLayoutView = inflater.inflate(R.layout.layout_toast_ad, null); adTextView = (TextView) adLayoutView.findViewById(R.id.tv_toast); adIvHeadView = (CircleImageView) adLayoutView.findViewById(R.id.iv_head_icon); adTextView.setText(str); ImageUtil.setRoundImgView(adIvHeadView, C.BASE_ICON_URL + headUrl, R.mipmap.home_ic_title_right); if (adToast != null) { adToast.setView(adLayoutView); } else { adToast = new Toast(App.getAppContext()); adToast.setView(adLayoutView); } adToast.setGravity(Gravity./*CENTER*/TOP, 0, DisplayUtil.dip2px(App.getAppContext(), 60)); adToast.setDuration(Toast.LENGTH_SHORT); adToast.show(); } }); } catch (Exception e) { } }