创建Service的问题?请帮看看?

ynduanlian 2015-02-15 11:21:55
我在MainActivity创建同时启动一个(从网络上接收消息)的服务:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Intent it=super.getIntent();
String strShopURL=it.getStringExtra("shop_url");
String StrUID=it.getStringExtra("UID");
String StrPWD=it.getStringExtra("PWD");


Intent intent=new Intent(MainActivity.this,OrderService.class);
String url2=new StringBuilder(strShopURL).append(this.getString(R.string.message_url))
.append("?UID=").append(StrUID).append("&PWD=").append(StrPWD).toString();
intent.putExtra("URL", url2);
startService(intent);
}


服务的代码大概是这样:

public class OrderService extends Service{
public static final String SETTING_FILE="Config";
public static final String SETTING_UID="UID";
public static final String SETTING_PWD="PWD";
private boolean threadDisable;
private NotificationManager notificationManager;
private SharedPreferences settings;
private String strURL;

@Override
public IBinder onBind(Intent intent){
return null;
}

@Override
public void onCreate(){
super.onCreate();
}

public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
strURL = intent.getStringExtra("URL");
Log.d("Service_URL",strURL);

notificationManager=(NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);

new Thread(new Runnable(){
@Override
public void run(){
while(!threadDisable){
try{
Log.d("Begin_try",strURL);
String StrTmp=getOrders(strURL);
if (!StrTmp.equals("")){
Notification notification2=new Notification();
String ringName=RingtoneManager.getActualDefaultRingtoneUri(OrderService.this, RingtoneManager.TYPE_NOTIFICATION ).toString();
notification2.sound=Uri.parse(ringName);
notificationManager.notify(0,notification2);

Notification notification1=new Notification();
notification1.icon=R.drawable.ic_launcher;
notification1.tickerText=StrTmp;
PendingIntent intent=PendingIntent.getActivity(OrderService.this,0, new Intent(OrderService.this,MainActivity.class), 0);
notification1.setLatestEventInfo(OrderService.this, "通知", "您收到:"+StrTmp+" 个新订单", intent);
notificationManager.notify(0,notification1);
}
Thread.sleep(60000);
}catch(InterruptedException e){
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
}
}
}).start();

}

@Override
public void onDestroy(){
super.onDestroy();
this.threadDisable=true;
}

private String getOrders(String strURL){
String res="";

try{
HttpClient httpClient=new DefaultHttpClient();
HttpGet httpGetRequest=new HttpGet(strURL);
Log.d("BeginGet","BeginGet");
HttpResponse response=httpClient.execute(httpGetRequest);
Log.d("EndGet",response.getStatusLine().toString());
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
String responseMsg=EntityUtils.toString(response.getEntity());
res=responseMsg;
}
}catch(ClientProtocolException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
return res;
}
}


那么:当用户切换到别的APP后,又切换回本APP,是不是会再次执行MainActivity的OnCreate ?而服务此时已经在运行,再次
StartService是不会导致错误?如果会,如何解决?
...全文
246 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT界的吉祥物 2015-02-23
  • 打赏
  • 举报
回复
将网络操作放的onCreat中去实现
windfury_plus 2015-02-17
  • 打赏
  • 举报
回复
同意1、2楼的回答
bdmh 2015-02-16
  • 打赏
  • 举报
回复
service即使多次被startservice启动,也只会执行一次create activity只要没被杀死或回收,不会再次执行create
画虎烂 2015-02-15
  • 打赏
  • 举报
回复
1、切换回本APP,如果MainActivity没把杀死的话,它是不会执行OnCreate的,会调用onResume 2、Service的OnCreate只会执行一次,onStart是每次startService都会执行

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧