1b0c8a887299a7f462c41408edda6043202143233Amith Yamasani/* 2b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * Copyright (C) 2017 The Android Open Source Project 3b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * 4b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 5b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * you may not use this file except in compliance with the License. 6b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * You may obtain a copy of the License at 7b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * 8b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 9b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * 10b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * Unless required by applicable law or agreed to in writing, software 11b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 12b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * See the License for the specific language governing permissions and 14b0c8a887299a7f462c41408edda6043202143233Amith Yamasani * limitations under the License. 15b0c8a887299a7f462c41408edda6043202143233Amith Yamasani */ 16b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 17b0c8a887299a7f462c41408edda6043202143233Amith Yamasanipackage com.android.tests.servicecrashtest; 18b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 19b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.app.Service; 20b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.content.Intent; 21b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.os.Handler; 22b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.os.HandlerThread; 23b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.os.IBinder; 24b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.os.Looper; 25b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.os.Message; 26b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.os.Process; 27b0c8a887299a7f462c41408edda6043202143233Amith Yamasaniimport android.widget.Toast; 28b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 29b0c8a887299a7f462c41408edda6043202143233Amith Yamasanipublic class CrashingService extends Service { 30b0c8a887299a7f462c41408edda6043202143233Amith Yamasani private ServiceHandler mServiceHandler; 31b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 32b0c8a887299a7f462c41408edda6043202143233Amith Yamasani static long CRASH_DELAY = 1000; 33b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 34b0c8a887299a7f462c41408edda6043202143233Amith Yamasani // Handler that receives messages from the thread 35b0c8a887299a7f462c41408edda6043202143233Amith Yamasani private final class ServiceHandler extends Handler { 36b0c8a887299a7f462c41408edda6043202143233Amith Yamasani public ServiceHandler(Looper looper) { 37b0c8a887299a7f462c41408edda6043202143233Amith Yamasani super(looper); 38b0c8a887299a7f462c41408edda6043202143233Amith Yamasani } 39b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 40b0c8a887299a7f462c41408edda6043202143233Amith Yamasani @Override 41b0c8a887299a7f462c41408edda6043202143233Amith Yamasani public void handleMessage(Message msg) { 42b0c8a887299a7f462c41408edda6043202143233Amith Yamasani throw new RuntimeException("Crashing!"); 43b0c8a887299a7f462c41408edda6043202143233Amith Yamasani } 44b0c8a887299a7f462c41408edda6043202143233Amith Yamasani } 45b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 46b0c8a887299a7f462c41408edda6043202143233Amith Yamasani @Override 47b0c8a887299a7f462c41408edda6043202143233Amith Yamasani public void onCreate() { 48b0c8a887299a7f462c41408edda6043202143233Amith Yamasani mServiceHandler = new ServiceHandler(Looper.getMainLooper()); 49b0c8a887299a7f462c41408edda6043202143233Amith Yamasani Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); 50b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 51b0c8a887299a7f462c41408edda6043202143233Amith Yamasani Message msg = mServiceHandler.obtainMessage(); 52b0c8a887299a7f462c41408edda6043202143233Amith Yamasani mServiceHandler.sendMessageDelayed(msg, CRASH_DELAY); 53b0c8a887299a7f462c41408edda6043202143233Amith Yamasani } 54b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 55b0c8a887299a7f462c41408edda6043202143233Amith Yamasani @Override 56b0c8a887299a7f462c41408edda6043202143233Amith Yamasani public int onStartCommand(Intent intent, int flags, int startId) { 57b0c8a887299a7f462c41408edda6043202143233Amith Yamasani // If we get killed, after returning from here, restart 58b0c8a887299a7f462c41408edda6043202143233Amith Yamasani return START_STICKY; 59b0c8a887299a7f462c41408edda6043202143233Amith Yamasani } 60b0c8a887299a7f462c41408edda6043202143233Amith Yamasani 61b0c8a887299a7f462c41408edda6043202143233Amith Yamasani @Override 62b0c8a887299a7f462c41408edda6043202143233Amith Yamasani public IBinder onBind(Intent intent) { 63b0c8a887299a7f462c41408edda6043202143233Amith Yamasani // We don't provide binding, so return null 64b0c8a887299a7f462c41408edda6043202143233Amith Yamasani return null; 65b0c8a887299a7f462c41408edda6043202143233Amith Yamasani } 66b0c8a887299a7f462c41408edda6043202143233Amith Yamasani}