2013-11-02 4 views
13

मैं एक कॉलेज के काम में एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं। इस काम में मैं टाइमर के साथ पृष्ठभूमि सेवा बनाना चाहता हूं और जब मैं एप्लिकेशन बंद करता हूं, टाइमर अभी भी चल रहा है। जब मैं ऐप खोलता हूं, तो मैं समय देख सकता हूं क्योंकि मैंने सेवा शुरू की है। ठीक है, मेरी समस्या यह है कि जब मैं ऐप बंद करता हूं, तो पृष्ठभूमि टाइमर बंद हो जाता है और अधिक वृद्धि नहीं करता है।पृष्ठभूमि में टाइमर

क्या आप कृपया मेरी मदद कर सकते हैं? धन्यवाद एक बहुत

मेरे लांचर वर्ग

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    private Button startButton; 
    private Button pauseButton; 

    private TextView timerValue; 

    Intent intent; 
    long timeSwapBuff = 0L; 
    long updatedTime = 0L; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     timerValue = (TextView) findViewById(R.id.timerValue); 

     startButton = (Button) findViewById(R.id.startButton); 
     startButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       intent = new Intent(MainActivity.this, CounterService.class); 
       startService(intent); 
       registerReceiver(broadcastReceiver, new IntentFilter(CounterService.BROADCAST_ACTION)); 
      } 
     }); 

     pauseButton = (Button) findViewById(R.id.pauseButton); 

     pauseButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       unregisterReceiver(broadcastReceiver); 
       stopService(intent); 
      } 
     }); 

    } 

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      updateUI(intent);  
     } 
    };  

    private void updateUI(Intent intent) { 
     int time = intent.getIntExtra("time", 0); 

     Log.d("Hello", "Time " + time); 

     int mins = time/60; 
     int secs = time % 60; 
     timerValue.setText("" + mins + ":" 
       + String.format("%02d", secs)); 
    } 


} 

और यहाँ, सेवा वर्ग

import android.app.Service; 
import android.content.Intent; 
import android.os.Handler; 
import android.os.IBinder; 
import android.os.SystemClock; 

public class CounterService extends Service { 

    private Intent intent; 
    public static final String BROADCAST_ACTION = "com.javacodegeeks.android.androidtimerexample.MainActivity"; 

    private Handler handler = new Handler(); 
    private long initial_time; 
    long timeInMilliseconds = 0L; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     initial_time = SystemClock.uptimeMillis(); 
     intent = new Intent(BROADCAST_ACTION); 
     handler.removeCallbacks(sendUpdatesToUI); 
     handler.postDelayed(sendUpdatesToUI, 1000); // 1 second 

    } 

    private Runnable sendUpdatesToUI = new Runnable() { 
     public void run() { 
      DisplayLoggingInfo();   
      handler.postDelayed(this, 1000); // 1 seconds 
     } 
    };  

    private void DisplayLoggingInfo() { 

     timeInMilliseconds = SystemClock.uptimeMillis() - initial_time; 

     int timer = (int) timeInMilliseconds/1000; 
     intent.putExtra("time", timer); 
     sendBroadcast(intent); 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     handler.removeCallbacks(sendUpdatesToUI); 

    } 



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


} 
+0

क्या यह एक आवश्यकता है कि आप इसके लिए 'सेवा' का उपयोग करें? आप किसी भी समय मिलीसेकंड में किसी भी समय (स्थानीय SQL डेटाबेस में भी 'साझा किए गए संदर्भों में) संग्रहीत कर सकते हैं, और यह निर्धारित करने के लिए कि आप कितनी देर से हैं, यह निर्धारित करने के लिए' ऑनर्यूसम() 'के भीतर कुछ त्वरित डेल्टा अंकगणित करें मापने की कोशिश कर रहा है। – Squagem

+0

मैं समय दिखाने वाली अधिसूचना रखने के लिए एक सेवा का उपयोग करने की कोशिश कर रहा हूं। लेकिन आपका विचार – Luis

+0

पर बुरा नहीं है, ठीक है, यदि आप 'सेवा' कक्षा (आमतौर पर कॉलेज कक्षाओं के मामले में) के बारे में अधिक जानने में रुचि रखते हैं, तो @Mahfa द्वारा दिए गए उत्तर पर एक नज़र डालें। अन्यथा, मेरा मानना ​​है कि मेरा सुझाव बहुत आसान होगा। – Squagem

उत्तर

7

आप इस तरह अपनी गतिविधि में onStop() विधि में अपनी सेवा शुरू करने की आवश्यकता:

@Override 
    protected void onStop() { 
     super.onStop(); 
     //write your code here to start your service 
    } 
0

मेरे लिए काम

public void onResume() { 
    super.onResume(); 

    //write your code here to start your service 

    registerReceiver(broadcastReceiver, new IntentFilter(ServiceClass.BROADCAST_ACTION)); 
} 
0
@Override 
protected void onStop() { 
    super.onStop(); 
    //write your code here to start your service 
} 

मुझे लगता है कि यह आपके लिए काम करना चाहिए।