当前位置: 代码迷 >> Android >> 创建Service的有关问题?请帮看看
  详细解决方案

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

热度:23   发布时间:2016-04-28 02:14:44.0
创建Service的问题?请帮看看?
我在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是不会导致错误?如果会,如何解决?
------解决思路----------------------
1、切换回本APP,如果MainActivity没把杀死的话,它是不会执行OnCreate的,会调用onResume
2、Service的OnCreate只会执行一次,onStart是每次startService都会执行

------解决思路----------------------
service即使多次被startservice启动,也只会执行一次create
activity只要没被杀死或回收,不会再次执行create
------解决思路----------------------
同意1、2楼的回答
------解决思路----------------------
将网络操作放的onCreat中去实现
  相关解决方案