難道我學習的是Service?

最新劇情,看完拼死前往約定地點的船長,真的很感動啊,布魯克也很強啊。

————————我是正文的分割線————

什麼是Service?

在Android王國中,Service是一個勞動模範,總是默默的在後臺運行,無怨無悔,且總是幹最髒最累的活,比如下載文件,傾聽音樂,網絡操作等這些耗時的操作,所以我們請尊重的叫他一聲:"勞模,您辛苦了".

Service 是一個應用程序組件

它能在後臺執行一些耗時較長的操作.

並且不提供用戶界面

服務能被其它的應用程序組件啓動,即使用戶切換到其他的應用程序時還能保持在後臺運行.

 服務不是一個線程,它運行在主線程.


四大組件都需要在manifests.xml中註冊,這個也不例外.如何啓動它
  1. Intent intent =newIntent(ServiceActivity.this,FirstService.class);
startService(intent); 生命週期onCreate(), onStartCommand(), onDestory()就這三個生命週期
  1. --FirstService-->:Service is running.
--FirstService-->: onCreate is running.--FirstService-->: onStartCommand is running.   我們在onStartCommand方法中打印下當前線程
  1. @Override
publicint onStartCommand(Intent intent,int flags,int startId){Log.i(TAG,"onStartCommand is running.Thread:"+Thread.currentThread());returnsuper.onStartCommand(intent, flags, startId);}打印結果如下:
  1. onStartCommand is running.Thread:Thread[main,5,main]
驗證了兩點:①由於是第二次運行,構造方法和onStart都沒有打印,說明服務一旦啓動是默默運行在後臺的;②服務是運行在主線程的 如何結束服務:①調用stopService()方法 ,會回調service的onDestory()方法;
  1. Intent intent2 =newIntent(ServiceActivity.this,FirstService.class);
stopService(intent2);還可以在Android系統設置-->應用-->正在運行-->找到後是如下樣式,會告訴我們有一個服務在運行;
創建自定義類繼承Service重寫方法


public class MyService extends Service {



    private static final String TAG = "MyService";

    public MyService() {

    }

   //重寫onCreate(),打印
    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG+Thread.currentThread().toString(), "onCreate: " );

    }
   //重寫onStartCommand,打印,在裏面寫一個子線程,實現倒計時功能
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG, "onStartCommand: " );
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=10;i>=0;i--){
                    Log.e(TAG+Thread.currentThread().toString(), "run: "+"----"+i);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }
    //重寫onBind()方法
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        Log.e(TAG, "onBind: " );
       throw new UnsupportedOperationException("Not yet implemented");
       // return mBinder;
    }
//    private DownloadBinder mBinder = new DownloadBinder();
//    class DownloadBinder extends Binder{
//
//        public void startDownload (){
//            Log.e(TAG, "startDownload: " );
//
//        }
//        public int getProgress(){
//            Log.e(TAG, "getProgress: " );
//            return 0;
//        }
//
//    }
    //重寫onDestroy()
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "onDestroy: " );
    }
}
在context環境啓動服務
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button startBtn;
    private Button stopBtn;
    private Button bindBtn;
    private Button unBindBtn;
    private EditText editText;
    private TextView textView;
    private  Intent startIntent;

//    private MyService.DownloadBinder downloadBinder ;
//    private ServiceConnection connection = new ServiceConnection() {
//        @Override
//        public void onServiceConnected(ComponentName name, IBinder service) {
//            downloadBinder = (MyService.DownloadBinder) service;
//            downloadBinder.startDownload();
//            downloadBinder.getProgress();
//
//        }
//
//        @Override
//        public void onServiceDisconnected(ComponentName name) {
//
//        }
//    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bangID();
    }

    private void bangID() {
        startBtn = findViewById(R.id.main_start_btn);
        stopBtn = findViewById(R.id.main_stop_btn);
        bindBtn = findViewById(R.id.main_bind_btn);
        unBindBtn = findViewById(R.id.main_unbind_btn);
        editText = findViewById(R.id.main_et);
        textView = findViewById(R.id.main_tv);

        startBtn.setOnClickListener(this);
        stopBtn.setOnClickListener(this);
        bindBtn.setOnClickListener(this);
        unBindBtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_start_btn:
                //啓動服務
                startIntent = new Intent(MainActivity.this,MyService.class);
                this.startService(startIntent);
                break;
            case R.id.main_stop_btn:
                //關閉服務
                this.stopService(startIntent);
                break;
//            case R.id.main_bind_btn:
//                Intent bindIntent = new Intent(MainActivity.this,MyService.class);
//                this.bindService(bindIntent,connection,BIND_AUTO_CREATE);
//                break;
//            case R.id.main_unbind_btn:
//                unbindService(connection);
//                break;
            default:
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章