我写了一个服务来记录后台的加速度计值。这个想法是注册传感器侦听器并将值写入存储。我已经启用了StrictMode.enableDefaults()在MainActivity应用程序(不在服务)的检查,如果在自己的线程在服务运行。但事实并非如此!我不知道是什么问题......我有这个AsyncTask类,我希望解决这个问题,但它显然没有(这是在服务内部,它的执行方法是从服务的方法中调用onCreate的。
private class LogTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
mListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
String formatted = String.valueOf(System.currentTimeMillis())
+ "\t" + String.valueOf(sensorEvent.timestamp)
+ "\t" + String.valueOf(sensorEvent.values[0])
+ "\t" + String.valueOf(sensorEvent.values[1])
+ "\t" + String.valueOf(sensorEvent.values[2])
+ "\r\n";
//if (mIsServiceStarted && mFileStream != null && mLogFile.exists()) {
if (mFileStream != null && mLogFile.exists()) {
try {
mFileStream.write(formatted.getBytes());
} catch (IOException e) { …Run Code Online (Sandbox Code Playgroud) java android android-service android-asynctask android-handler
好的,所以我已经阅读了许多关于处理程序的教程和线程,但是他们似乎对我自己的处理程序知识更加先进,这是我第一次使用处理程序这么光顾我.我在处理程序上有这个示例应用程序,它在某个时间触发Log,但是当我点击我的开始按钮时它似乎无法正常工作.以下是我的代码.
public class Main extends Activity {
private long selectedTimeInMills;
private Handler handler;
private static final Calendar CALENDAR = Calendar.getInstance();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TimePicker timepicker = (TimePicker) findViewById(R.id.timePicker1);
final TextView timeText = (TextView) findViewById(R.id.time);
Button start = (Button) findViewById(R.id.button1);
handler = new Handler();
String textTime = formatDate(CALENDAR.getTimeInMillis(), "hh:mm a");
timeText.setText(textTime);
timepicker.setOnTimeChangedListener(new OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
CALENDAR.set(Calendar.HOUR_OF_DAY, hourOfDay);
CALENDAR.set(Calendar.MINUTE, minute);
selectedTimeInMills = CALENDAR.getTimeInMillis();
String textTime = formatDate(CALENDAR.getTimeInMillis(), "hh:mm a"); …Run Code Online (Sandbox Code Playgroud) 以下消息处理程序可以很好地从我的服务接收消息...
private Handler handler = new Handler()
{
public void handleMessage(Message message)
{
Object path = message.obj;
if (message.arg1 == 5 && path != null) //5 means its a single mapleg to plot on the map
{
String myString = (String) message.obj;
Gson gson = new Gson();
MapPlot mapleg = gson.fromJson(myString, MapPlot.class);
myMapView.getOverlays().add(new DirectionPathOverlay(mapleg.fromPoint, mapleg.toPoint));
mc.animateTo(mapleg.toPoint);
}
else
{
if (message.arg1 == RESULT_OK && path != null)
{
Toast.makeText(PSActivity.this, "Service Started" + path.toString(), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(PSActivity.this,"Service error" + …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个Android应用程序,当一个按钮点击处理程序时,将每隔2秒激活一个烤面包机.同样在另一方面,我有一个停止按钮,我想从中停止点击正在运行的线程
这是我的代码
private final int FIVE_SECONDS = 2000;
public void scheduleSendLocation() {
handler.postDelayed(new Runnable() {
public void run() {
sendLocation(); // this method will contain your almost-finished HTTP calls
handler.postDelayed(this, FIVE_SECONDS);
}
}, FIVE_SECONDS);
}
protected void sendLocation() {
Toast.makeText(getApplicationContext(), "Your Location is ", Toast.LENGTH_SHORT).show();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
stop = (Button) findViewById(R.id.stop);
btnShowLocation.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
scheduleSendLocation();
}
});
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) …Run Code Online (Sandbox Code Playgroud) @Override
public void onUserInteraction() {
Handler handler = new Handler();
handler.postDelayed(new Runnable () {
public void run() {
finish();
}
}, 5000);
handler.removeCallbacks(null);
}
Run Code Online (Sandbox Code Playgroud)
我试图在调用 OnCreate 方法时运行处理程序。然后,当我收到用户交互时,我想取消处理程序并再次调用它(重新启动处理程序)。
我该怎么做?
提前致谢
我有一个名为myAsync的asynctask,它执行一些网络操作(从服务器获取数据,并解析json).
一旦活动运行,我也会创建一个处理程序.
我也有一个runnable,我运行asynctask.我使用runnable的原因是因为我将在Handler的postdelayed方法中使用它,因为我希望每1分钟重复一次.
Runnable runnable = new Runnable()
{
public void run()
{
new myAsync ().execute();
}
};
Run Code Online (Sandbox Code Playgroud)
然后我在onResume中使用上面的runnable;
@Override
protected void onResume()
{
super.onResume();
handler.postDelayed(runnable, 60000);
}
Run Code Online (Sandbox Code Playgroud)
每当我离开活动时,我都希望支票停止,所以我打电话给,
handler.removeCallbacks(runnable);
Run Code Online (Sandbox Code Playgroud)
然而,asynctask继续不停地运行.我该怎么办 ?
Handler类发生了什么事.为什么它向我展示这种类型的错误?我可以通过调用Handler覆盖方法来解决它.但我不想要他们.我该怎么办.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
blink();
}
private void blink(){
final Handler handler = new Handler(); //showing error and need to call their override methods.
new Thread(new Runnable() {
@Override
public void run() {
int timeToBlink = 1000; //in milissegunds
try{Thread.sleep(timeToBlink);}catch (Exception e) {}
handler.post(new Runnable() {
@Override
public void run() {
TextView txt = (TextView) findViewById(R.id.blink);
if(txt.getVisibility() == View.VISIBLE){
txt.setVisibility(View.INVISIBLE);
}else{
txt.setVisibility(View.VISIBLE);
}
blink();
}
});
}
}).start();
} …Run Code Online (Sandbox Code Playgroud) 我正在制作一个简单的材料设计登录屏幕,显示进度对话框,同时改造正在获取数据.
我最近升级到改装2,所以我对此很新.
我的LoginActivity代码:
private void login(){
Log.d(TAG, "Attempting login");
if(!validate()){
onLoginFailure();
return;
}
login_button.setEnabled(false);
progressDialog = new ProgressDialog(LoginActivity.this, R.style.AppTheme_Dark_Dialog);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Authenticating...");
progressDialog.show();
String username = _usernameText.getText().toString().toLowerCase(); //all usernames are lowercase only
String password = _passwordText.getText().toString();
//here we handle the NWL section.
startTime = System.currentTimeMillis();
NWL.login(username, password, this); //This runs async to UI anyway.
}
Run Code Online (Sandbox Code Playgroud)
和LoginActivity中的其他功能:
@BindView(R.id.login_button)
Button login_button;
public void loginOK() {
progressDialog.dismiss();
login_button.setEnabled(true);
toastCreator.showToastLong("Login OK");
Log.d(TAG, "Total time: " + (System.currentTimeMillis()-startTime));
}
Run Code Online (Sandbox Code Playgroud)
我的NetworkLogic(NWL)类的代码:
public void login(String username, String password, …Run Code Online (Sandbox Code Playgroud)